SQL查询 - 一个人的所有休闲

时间:2012-03-18 15:26:45

标签: php mysql sql

我是新来的。我想我可以在我的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' 但我不确定如何。

请帮忙。

4 个答案:

答案 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_loisirspersonnes之间的链接时出错了 - 您在最终查询中从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'
;