OVH Cloud OVH Cloud

Probleme de requete SQL pour MySQL

5 réponses
Avatar
Olivier
Bonjour,

J'ai un soucy pour realiser un select sur des tables liées :

les tables :

table1
id nom etat
1 nom1 1
2 nom2 1

table2
id_table1 id_livre
1 1
1 2
2 2
2 3
3 1
3 16
3 42
2 3
4 2
4 3


en MSSQL j'utilise la requete suivante :

select nom from table1 where etat = 1 and
(id in (select id_table1 from table2 where id_livre = 1) and id in (select
id_table1 from table2 where id_livre = 2))

qui me renvoie l'id de la table1 dont les id_livres sont reliés, soit 1

mais en MySQL j'ai l'érreur #1064 (parse error) après le "...where id_livre
= 1) and "

Je dois pouvoir sélectionner l'id de la table1 dont les valeurs id_livres de
la table2 (liée à la table1) sont connues par avance, et que l'état soit à 1

Comment règler le probleme ?

Merci

Olivier

5 réponses

Avatar
Daniel Martin
Olivier wrote:


en MSSQL j'utilise la requete suivante :

select nom from table1 where etat = 1 and
(id in (select id_table1 from table2 where id_livre = 1) and id in (select
id_table1 from table2 where id_livre = 2))

qui me renvoie l'id de la table1 dont les id_livres sont reliés, soit 1

mais en MySQL j'ai l'érreur #1064 (parse error) après le "...where id_livre
= 1) and "




pas de sous requêtes en mysql :-( . Prendre Postgres :-)
Avatar
Olivier
Salut,

Ah mince ... tu sais comment faire autrement ? je veux dire formuler la
requete autrement ... j'ai essayé plein de combinaisons mais sans succès ...

Olivier



"Daniel Martin" a écrit dans le message de
news:40bc2163$0$12750$
Olivier wrote:


> en MSSQL j'utilise la requete suivante :
>
> select nom from table1 where etat = 1 and
> (id in (select id_table1 from table2 where id_livre = 1) and id in


(select
> id_table1 from table2 where id_livre = 2))
>
> qui me renvoie l'id de la table1 dont les id_livres sont reliés, soit 1
>
> mais en MySQL j'ai l'érreur #1064 (parse error) après le "...where


id_livre
> = 1) and "
>

pas de sous requêtes en mysql :-( . Prendre Postgres :-)

Avatar
Fred BROUARD - SQLpro
Ces sous requêtes sont strcitement inutiles et pénalisantes, même pour MS SQL Server.

Uen simple application des bases de la jointure suffit :

select T1.nom
from table1 T1
INNER JOIN table2 T2
ON T1.id = T2.id_table1
INNER JOIN table2 T3
ON T1.id = T3.id_table1
where T1.etat = 1
and T2.id_livre = 1
and T3.id_livre = 2


A +



--
Frédéric BROUARD, MVP MS SQL Server. Expert Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************

Olivier a écrit:
Bonjour,

J'ai un soucy pour realiser un select sur des tables liées :

les tables :

table1
id nom etat
1 nom1 1
2 nom2 1

table2
id_table1 id_livre
1 1
1 2
2 2
2 3
3 1
3 16
3 42
2 3
4 2
4 3


en MSSQL j'utilise la requete suivante :

select nom from table1 where etat = 1 and
(id in (select id_table1 from table2 where id_livre = 1) and id in (select
id_table1 from table2 where id_livre = 2))

qui me renvoie l'id de la table1 dont les id_livres sont reliés, soit 1

mais en MySQL j'ai l'érreur #1064 (parse error) après le "...where id_livre
= 1) and "

Je dois pouvoir sélectionner l'id de la table1 dont les valeurs id_livres de
la table2 (liée à la table1) sont connues par avance, et que l'état soit à 1

Comment règler le probleme ?

Merci

Olivier




Avatar
Olivier
Bonsoir,

ah ... ok merci pour ton modèle ;-)

Olivier


"Fred BROUARD - SQLpro" a écrit dans le message
de news:40bc7ba1$0$305$
Ces sous requêtes sont strcitement inutiles et pénalisantes, même pour MS


SQL Server.

Uen simple application des bases de la jointure suffit :

select T1.nom
from table1 T1
INNER JOIN table2 T2
ON T1.id = T2.id_table1
INNER JOIN table2 T3
ON T1.id = T3.id_table1
where T1.etat = 1
and T2.id_livre = 1
and T3.id_livre = 2


A +



--
Frédéric BROUARD, MVP MS SQL Server. Expert Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************

Olivier a écrit:
> Bonjour,
>
> J'ai un soucy pour realiser un select sur des tables liées :
>
> les tables :
>
> table1
> id nom etat
> 1 nom1 1
> 2 nom2 1
>
> table2
> id_table1 id_livre
> 1 1
> 1 2
> 2 2
> 2 3
> 3 1
> 3 16
> 3 42
> 2 3
> 4 2
> 4 3
>
>
> en MSSQL j'utilise la requete suivante :
>
> select nom from table1 where etat = 1 and
> (id in (select id_table1 from table2 where id_livre = 1) and id in


(select
> id_table1 from table2 where id_livre = 2))
>
> qui me renvoie l'id de la table1 dont les id_livres sont reliés, soit 1
>
> mais en MySQL j'ai l'érreur #1064 (parse error) après le "...where


id_livre
> = 1) and "
>
> Je dois pouvoir sélectionner l'id de la table1 dont les valeurs


id_livres de
> la table2 (liée à la table1) sont connues par avance, et que l'état soit


à 1
>
> Comment règler le probleme ?
>
> Merci
>
> Olivier
>
>
>
>

Avatar
bruno modulix
Daniel Martin a écrit :
Olivier wrote:


en MSSQL j'utilise la requete suivante :

select nom from table1 where etat = 1 and
(id in (select id_table1 from table2 where id_livre = 1) and id in
(select
id_table1 from table2 where id_livre = 2))

qui me renvoie l'id de la table1 dont les id_livres sont reliés, soit 1

mais en MySQL j'ai l'érreur #1064 (parse error) après le "...where
id_livre
= 1) and "




pas de sous requêtes en mysql :-( . Prendre Postgres :-)



Si, mais à partir de la version 4.x
(ceci étant, je ne peux qu'être d'accord avec la seconde partie de la
réponse !-)

Bruno