OVH Cloud OVH Cloud

2 requêtes en 1 ?

7 réponses
Avatar
[Bruno]
Bonjour à tous,



J'ai une base pour un système de petites annonces organisé comme suit :



Une table annonceurs

Une table annonces

Et une table des parutions ; qui pointe sur un annonceur et une annonce et
donne pour chaque parution une date de début et de fin de parution et un
code postal (qui est le lieu de parution)



Dans mon system de petits annonces, un annonceur qui est domicilié dans le
92100 peut passer des annonces sur d'autres localités (75016 par exemple) .



Lorsque j'affiche les annonces du 75016, les parutions des annonceurs
domiciliés dans 75016 passent avant les autres parutions



Donc je fais deux requêtes :



SELECT *

FROM mes_tables

WHERE (annonceur.code_postal = 75016) AND (parution.code_postal = 75016)



SELECT *

FROM mes_tables

WHERE (annonceur.code_postal <> 75016) AND (parution.code_postal = 75016)



Pour afficher mes annonces !





Est il possible de faire ça en une seule requête ?

Et comment ?

7 réponses

Avatar
AXL
Tu peux mettre un Union entre tes deux requêtes

du genre
SELECT *

FROM mes_tables

WHERE (annonceur.code_postal = 75016) AND (parution.code_postal = 75016)

union

SELECT *

FROM mes_tables

WHERE (annonceur.code_postal <> 75016) AND (parution.code_postal = 75016)



"[Bruno]" <brunonewsgroup[@]wanadoo.fr> a écrit dans le message de
news:blrac9$b85$
Bonjour à tous,



J'ai une base pour un système de petites annonces organisé comme suit :



Une table annonceurs

Une table annonces

Et une table des parutions ; qui pointe sur un annonceur et une annonce et
donne pour chaque parution une date de début et de fin de parution et un
code postal (qui est le lieu de parution)



Dans mon system de petits annonces, un annonceur qui est domicilié dans le
92100 peut passer des annonces sur d'autres localités (75016 par exemple)


.



Lorsque j'affiche les annonces du 75016, les parutions des annonceurs
domiciliés dans 75016 passent avant les autres parutions



Donc je fais deux requêtes :



SELECT *

FROM mes_tables

WHERE (annonceur.code_postal = 75016) AND (parution.code_postal = 75016)



SELECT *

FROM mes_tables

WHERE (annonceur.code_postal <> 75016) AND (parution.code_postal = 75016)



Pour afficher mes annonces !





Est il possible de faire ça en une seule requête ?

Et comment ?




Avatar
[Bruno]
J'ai ca, comme mpessage d'erreur !!!

ODBC Error Code = 37000 (Syntax error or access violation)

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntaxe incorrecte vers le
mot clé 'UNION'.






"AXL" <~cyrille.pele@~irec.fr> a écrit dans le message de news:
eWhJgx#
Tu peux mettre un Union entre tes deux requêtes

du genre
SELECT *

FROM mes_tables

WHERE (annonceur.code_postal = 75016) AND (parution.code_postal = 75016)

union

SELECT *

FROM mes_tables

WHERE (annonceur.code_postal <> 75016) AND (parution.code_postal = 75016)



"[Bruno]" <brunonewsgroup[@]wanadoo.fr> a écrit dans le message de
news:blrac9$b85$
> Bonjour à tous,
>
>
>
> J'ai une base pour un système de petites annonces organisé comme suit :
>
>
>
> Une table annonceurs
>
> Une table annonces
>
> Et une table des parutions ; qui pointe sur un annonceur et une annonce


et
> donne pour chaque parution une date de début et de fin de parution et un
> code postal (qui est le lieu de parution)
>
>
>
> Dans mon system de petits annonces, un annonceur qui est domicilié dans


le
> 92100 peut passer des annonces sur d'autres localités (75016 par


exemple)
.
>
>
>
> Lorsque j'affiche les annonces du 75016, les parutions des annonceurs
> domiciliés dans 75016 passent avant les autres parutions
>
>
>
> Donc je fais deux requêtes :
>
>
>
> SELECT *
>
> FROM mes_tables
>
> WHERE (annonceur.code_postal = 75016) AND (parution.code_postal = 75016)
>
>
>
> SELECT *
>
> FROM mes_tables
>
> WHERE (annonceur.code_postal <> 75016) AND (parution.code_postal 75016)
>
>
>
> Pour afficher mes annonces !
>
>
>
>
>
> Est il possible de faire ça en une seule requête ?
>
> Et comment ?
>
>




Avatar
AXL
Je viens d'essayer sur la base pubs de SQL serveur
la requête suivante :

essaye la et tu verra que ça marche

declare @varauthors bit
select @varauthors=1 -- 1 ou 0

select 1 as test ,au_lname,au_fname from authors where state='CA' and
contract=@varauthors
union
select 2 as test ,au_lname,au_fname from authors where state='MD' and
contract=@varauthors
order by test

Ça marche niquel ;-)))



"[Bruno]" <brunonewsgroup[@]wanadoo.fr> a écrit dans le message de
news:blrqqt$r7$
J'ai ca, comme mpessage d'erreur !!!

ODBC Error Code = 37000 (Syntax error or access violation)

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntaxe incorrecte vers le
mot clé 'UNION'.






"AXL" <~cyrille.pele@~irec.fr> a écrit dans le message de news:
eWhJgx#
> Tu peux mettre un Union entre tes deux requêtes
>
> du genre
> SELECT *
>
> FROM mes_tables
>
> WHERE (annonceur.code_postal = 75016) AND (parution.code_postal = 75016)
>
> union
>
> SELECT *
>
> FROM mes_tables
>
> WHERE (annonceur.code_postal <> 75016) AND (parution.code_postal 75016)
>
>
>
> "[Bruno]" <brunonewsgroup[@]wanadoo.fr> a écrit dans le message de
> news:blrac9$b85$
> > Bonjour à tous,
> >
> >
> >
> > J'ai une base pour un système de petites annonces organisé comme suit


:
> >
> >
> >
> > Une table annonceurs
> >
> > Une table annonces
> >
> > Et une table des parutions ; qui pointe sur un annonceur et une


annonce
et
> > donne pour chaque parution une date de début et de fin de parution et


un
> > code postal (qui est le lieu de parution)
> >
> >
> >
> > Dans mon system de petits annonces, un annonceur qui est domicilié


dans
le
> > 92100 peut passer des annonces sur d'autres localités (75016 par
exemple)
> .
> >
> >
> >
> > Lorsque j'affiche les annonces du 75016, les parutions des annonceurs
> > domiciliés dans 75016 passent avant les autres parutions
> >
> >
> >
> > Donc je fais deux requêtes :
> >
> >
> >
> > SELECT *
> >
> > FROM mes_tables
> >
> > WHERE (annonceur.code_postal = 75016) AND (parution.code_postal 75016)
> >
> >
> >
> > SELECT *
> >
> > FROM mes_tables
> >
> > WHERE (annonceur.code_postal <> 75016) AND (parution.code_postal > 75016)
> >
> >
> >
> > Pour afficher mes annonces !
> >
> >
> >
> >
> >
> > Est il possible de faire ça en une seule requête ?
> >
> > Et comment ?
> >
> >
>
>




Avatar
AXL
je peux voir le texte exact de ta requête !!!!

"[Bruno]" <brunonewsgroup[@]wanadoo.fr> a écrit dans le message de
news:blrqqt$r7$
J'ai ca, comme mpessage d'erreur !!!

ODBC Error Code = 37000 (Syntax error or access violation)

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntaxe incorrecte vers le
mot clé 'UNION'.






"AXL" <~cyrille.pele@~irec.fr> a écrit dans le message de news:
eWhJgx#
> Tu peux mettre un Union entre tes deux requêtes
>
> du genre
> SELECT *
>
> FROM mes_tables
>
> WHERE (annonceur.code_postal = 75016) AND (parution.code_postal = 75016)
>
> union
>
> SELECT *
>
> FROM mes_tables
>
> WHERE (annonceur.code_postal <> 75016) AND (parution.code_postal 75016)
>
>
>
> "[Bruno]" <brunonewsgroup[@]wanadoo.fr> a écrit dans le message de
> news:blrac9$b85$
> > Bonjour à tous,
> >
> >
> >
> > J'ai une base pour un système de petites annonces organisé comme suit


:
> >
> >
> >
> > Une table annonceurs
> >
> > Une table annonces
> >
> > Et une table des parutions ; qui pointe sur un annonceur et une


annonce
et
> > donne pour chaque parution une date de début et de fin de parution et


un
> > code postal (qui est le lieu de parution)
> >
> >
> >
> > Dans mon system de petits annonces, un annonceur qui est domicilié


dans
le
> > 92100 peut passer des annonces sur d'autres localités (75016 par
exemple)
> .
> >
> >
> >
> > Lorsque j'affiche les annonces du 75016, les parutions des annonceurs
> > domiciliés dans 75016 passent avant les autres parutions
> >
> >
> >
> > Donc je fais deux requêtes :
> >
> >
> >
> > SELECT *
> >
> > FROM mes_tables
> >
> > WHERE (annonceur.code_postal = 75016) AND (parution.code_postal 75016)
> >
> >
> >
> > SELECT *
> >
> > FROM mes_tables
> >
> > WHERE (annonceur.code_postal <> 75016) AND (parution.code_postal > 75016)
> >
> >
> >
> > Pour afficher mes annonces !
> >
> >
> >
> >
> >
> > Est il possible de faire ça en une seule requête ?
> >
> > Et comment ?
> >
> >
>
>




Avatar
[Bruno]
Effectivement, ca marche !



En fait j'avais laissé un ORDER BY pour chaque requête !



Or, visiblement, ont ne peut en avoir qu'un pour toutes les requêtes.



Ce que je voudrais, c'est gardez un tri par requête et collé mes deux
requêtes bout a bout !









"AXL" <~cyrille.pele@~irec.fr> a écrit dans le message de news:
#
Je viens d'essayer sur la base pubs de SQL serveur
la requête suivante :

essaye la et tu verra que ça marche

declare @varauthors bit
select @varauthors=1 -- 1 ou 0

select 1 as test ,au_lname,au_fname from authors where state='CA' and
contract=@varauthors
union
select 2 as test ,au_lname,au_fname from authors where state='MD' and
contract=@varauthors
order by test

Ça marche niquel ;-)))



"[Bruno]" <brunonewsgroup[@]wanadoo.fr> a écrit dans le message de
news:blrqqt$r7$
> J'ai ca, comme mpessage d'erreur !!!
>
> ODBC Error Code = 37000 (Syntax error or access violation)
>
> [Microsoft][ODBC SQL Server Driver][SQL Server]Syntaxe incorrecte vers


le
> mot clé 'UNION'.
>
>
>
>
>
>
> "AXL" <~cyrille.pele@~irec.fr> a écrit dans le message de news:
> eWhJgx#
> > Tu peux mettre un Union entre tes deux requêtes
> >
> > du genre
> > SELECT *
> >
> > FROM mes_tables
> >
> > WHERE (annonceur.code_postal = 75016) AND (parution.code_postal 75016)
> >
> > union
> >
> > SELECT *
> >
> > FROM mes_tables
> >
> > WHERE (annonceur.code_postal <> 75016) AND (parution.code_postal > 75016)
> >
> >
> >
> > "[Bruno]" <brunonewsgroup[@]wanadoo.fr> a écrit dans le message de
> > news:blrac9$b85$
> > > Bonjour à tous,
> > >
> > >
> > >
> > > J'ai une base pour un système de petites annonces organisé comme


suit
:
> > >
> > >
> > >
> > > Une table annonceurs
> > >
> > > Une table annonces
> > >
> > > Et une table des parutions ; qui pointe sur un annonceur et une
annonce
> et
> > > donne pour chaque parution une date de début et de fin de parution


et
un
> > > code postal (qui est le lieu de parution)
> > >
> > >
> > >
> > > Dans mon system de petits annonces, un annonceur qui est domicilié
dans
> le
> > > 92100 peut passer des annonces sur d'autres localités (75016 par
> exemple)
> > .
> > >
> > >
> > >
> > > Lorsque j'affiche les annonces du 75016, les parutions des


annonceurs
> > > domiciliés dans 75016 passent avant les autres parutions
> > >
> > >
> > >
> > > Donc je fais deux requêtes :
> > >
> > >
> > >
> > > SELECT *
> > >
> > > FROM mes_tables
> > >
> > > WHERE (annonceur.code_postal = 75016) AND (parution.code_postal > 75016)
> > >
> > >
> > >
> > > SELECT *
> > >
> > > FROM mes_tables
> > >
> > > WHERE (annonceur.code_postal <> 75016) AND (parution.code_postal > > 75016)
> > >
> > >
> > >
> > > Pour afficher mes annonces !
> > >
> > >
> > >
> > >
> > >
> > > Est il possible de faire ça en une seule requête ?
> > >
> > > Et comment ?
> > >
> > >
> >
> >
>
>




Avatar
Pierre Goiffon
Dans le message:bls9pj$8le$,
[Bruno] <brunonewsgroup[@]wanadoo.fr> a écrit:
select 1 as test ,au_lname,au_fname from authors where state='CA' and
contract=@varauthors
union
select 2 as test ,au_lname,au_fname from authors where state='MD' and
contract=@varauthors
order by test





Ce que je voudrais, c'est gardez un tri par requête et collé mes deux
requêtes bout a bout !



Pour cela, il vous suffit de laisser un champ ordre par exemple (cf dans
la requête indiquée le champ test) et de trier dessus

SELECT 1 as ordre, ...

UNION

SELECT 2 as ordre, ...

ORDER BY ordre, ...

--

..::: Pierre GOIFFON :::..

Un grand merci à OE Quote Fix pour rendre OE utilisable :)
=> http://home.in.tum.de/~jain/software/quotefix.php

(email temporairement supprimé pour cause de déferlante Swen :( )
Avatar
[Bruno]
Merci pour les précisions,

Alors j'ai fais des tests qui marche très bien avec des requêtes simple mais
quand je passe a des requêtes plus complexe ça merde

Donc je continu mes test !







"Pierre Goiffon" a écrit dans le message de news:
blu0ka$cid$
Dans le message:bls9pj$8le$,
[Bruno] <brunonewsgroup[@]wanadoo.fr> a écrit:
>> select 1 as test ,au_lname,au_fname from authors where state='CA' and
>> contract=@varauthors
>> union
>> select 2 as test ,au_lname,au_fname from authors where state='MD' and
>> contract=@varauthors
>> order by test

> Ce que je voudrais, c'est gardez un tri par requête et collé mes deux
> requêtes bout a bout !

Pour cela, il vous suffit de laisser un champ ordre par exemple (cf dans
la requête indiquée le champ test) et de trier dessus

SELECT 1 as ordre, ...

UNION

SELECT 2 as ordre, ...

ORDER BY ordre, ...

--

..::: Pierre GOIFFON :::..

Un grand merci à OE Quote Fix pour rendre OE utilisable :)
=> http://home.in.tum.de/~jain/software/quotefix.php

(email temporairement supprimé pour cause de déferlante Swen :( )