我是新来的。我想我可以在我的php-sql作业上寻求一些帮助。 我一直在尝试使用SQL提取与注册人相关的所有体育。
我的mySql中有三个表。
存储个人的personnes
[id] [sexe] [etat_civil] [nom] [prenom]
1 Homme M. Smith Alex
2 Femme Mme Alisha Elektra
3 Femme Mll Lord Yves
保存运动或休闲类型的loisirs
id nom
1 Sport
2 Concert
3 Jeux vidéo
4 Jeux société
5 Voyage
6 Cinéma
7 Lecture
8 Théâtre
9 Danse
10 Animaux
11 Randonnée
12 Shopping
personnes_loisirs ,用于存储与外键ID相关联的个人的外键。
[id] [fk_personnes] [fk_loisirs]
1 1 1
2 1 2
3 1 3
4 2 1
5 2 3
6 2 4
7 2 5
8 3 7
9 3 8
10 3 9
基本上,我成功地提取了用户的运动,但前提是只有一项与他相关的运动。如果超过1,我就无法完成其余部分。
这是SQL
select nom
from `loisirs`
where id in
(select fk_loisirs
from `personnes_loisirs`
where id in
(select id
from `personnes`
where sexe='Homme' AND nom='Smith' AND prenom='Alex'))
这让我回归'运动'而不是'运动,音乐会和JeuxVidéo';
我想我必须使用JOIN来检索与SmithAlex相关的所有'loisirs' 但我不确定如何。
请帮忙。
答案 0 :(得分:2)
您的子查询不正确。你不应该说where id in...
你应该说where fk_personnes in...
答案 1 :(得分:2)
select l.nom
from personnes p
join personner_loisirs pl on p.id = pl.fk_personnes
join loisirs l on l.id = pl.fk_loisirs
where p.nom = 'Smith' and p.prenom='Alex'
答案 2 :(得分:2)
在原始查询中,您在检查personnes_loisirs
和personnes
之间的链接时出错了 - 您在最终查询中从id
返回personnes
但是你应该使用fk_personnes
。基本上,这是一个非常好的演示,为什么名为id
的字段可能会令人困惑......
此外,您应该根据构建查询的另一种方式来衡量,例如
select l.nom
from personnes p
inner join personnes_loisirs pl on pl.[fk_personnes] = p.[id]
inner join loisirs l on l.[id] = pl.fk_loisirs
where p.sexe='Homme'
and p.nom='Smith'
and p.prenom='Alex'
答案 3 :(得分:0)
尝试此查询:(未经测试)
SELECT loisirs.*
FROM loisirs
INNER JOIN personnes_loisirs ON personnes_loisirs.fk_loisirs = loisirs.id
INNER JOIN personnes ON personnes_loisirs.fk_personnes = personnes.id
WHERE personnes.sexe='Homme'
AND personnes.nom='Smith'
AND personnes.prenom='Alex'
;