Referencer mes tables

Fermé
Cbcb72. - 25 mai 2013 à 13:54
funnycat Messages postés 153 Date d'inscription jeudi 12 février 2009 Statut Membre Dernière intervention 10 mars 2019 - 27 mai 2013 à 22:11
Bonjour,

Comment peut on faire une requête de jointures entre 3 ces tables:

create table t_a (
a1 varchar(200) NOT NULL,
a2_info text,
primary key(a1));

CREATE TABLE t_p (
p1 varchar(200)NOT NULL,
p2 varchar(200) NOT NULL,
p3_info text,
PRIMARY KEY (p1),
FOREIGN KEY (p2)
references t_a(a1) on delete cascade);

create table t_m (
m1 varchar(200) not null,
m2 varchar(200) not null,
m3 varchar(200) not null,
m4 varchar(200) not null,
m5varchar(200) not null default '',
m6 varchar(20) not null default '',
m7 varchar(200) not null,
m8 int(30) not null default '0',
m9 varchar(200) not null,
m10 int(30) not null,
m11 varchar(200) not null,
m12 varchar(200) not null,
m13 int(30) not null default '0',
m14 int(30) not null default '0',
m15 int(30) not null default '0',
m16 varchar(200) not null,
m17 varchar(200) not null,
m18 varchar(200) not null,
m 19varchar(200) not null default 'images',
m20 date,
m21 text,
primary key(m1),
foreign key(m2)
references t_p(1) on DELETE cascade)engine=innodb;

Alors je fais la requête en Mysql:

SELECT * FROM t_m, t_p, t_a
WHERE a1=p2
AND p1=m2
AND a1="blablabla"
Les tables ne sont pas vide. La requête est exécuté avec succès mais la réponse est vide.

HELP !!!!!!


1 réponse

funnycat Messages postés 153 Date d'inscription jeudi 12 février 2009 Statut Membre Dernière intervention 10 mars 2019 65
27 mai 2013 à 22:11
Bonjour.
En lien les tables de cette façon il n'y aura des résultats que si les conditions sont vrai.
Voici une autre façon de faire la même requête (personnellement je préfère utiliser INNER JOIN c'est plus facile à lire) :
SELECT *
FROM t_m
INNER JOIN t_p ON p1 = m2
INNER JOIN t_a ON a1 = p2
WHERE a1="blablabla" 

Si vous souhaitez afficher des résultats même s'il n'y a pas de correspondance dans les tables "t_p" et "t_a", vous pouvez aussi effectuer la requête suivante :
SELECT *
FROM t_m
LEFT OUTER JOIN t_p ON p1 = m2
LEFT OUTER JOIN t_a ON a1 = p2
WHERE a1="blablabla" 


(Cf. https://sql.sh/cours/jointures )

En espérant que ça résoudra votre problématique.
Cordialement,
0