68

我有 3 张桌子:

人员(PersonID、姓名、SS)
恐惧(FearID,恐惧)
Person_Fear (ID, PersonID, FearID)

现在我想列出每个人都有与他们相关的恐惧(可以是多种恐惧,但也可以没有)。即使一个人没有与他们相关的恐惧,也必须显示人员表。

我想我需要做一个 LEFT JOIN,但我的代码似乎不起作用:

SELECT persons.name, 
       persons.ss, 
       fears.fear 
FROM   persons 
       LEFT JOIN fears 
              ON person_fear.personid = person_fear.fearid 

我在这里做错了什么?

4

6 回答 6

89

您正在尝试加入Person_Fear.PersonID-Person_Fear.FearID这没有任何意义。你可能想要这样的东西:

SELECT Persons.Name, Persons.SS, Fears.Fear FROM Persons
LEFT JOIN Person_Fear
    INNER JOIN Fears
    ON Person_Fear.FearID = Fears.FearID
ON Person_Fear.PersonID = Persons.PersonID

这通过中间表连接Persons到。因为 和 之间的连接是a ,所以您将获得所有记录。FearsPerson_FearPersonsPerson_FearLEFT JOINPersons

或者:

SELECT Persons.Name, Persons.SS, Fears.Fear FROM Persons
LEFT JOIN Person_Fear ON Person_Fear.PersonID = Persons.PersonID
LEFT JOIN Fears ON Person_Fear.FearID = Fears.FearID
于 2013-04-25T18:33:35.173 回答
28

尝试这个

    SELECT p.Name, p.SS, f.Fear 
    FROM Persons p 
    LEFT JOIN Person_Fear fp 
    ON p.PersonID = fp.PersonID
    LEFT JOIN Fear f
    ON f.FearID = fp.FearID
于 2013-04-25T18:41:15.410 回答
19

试试这个绝对有效。

SELECT p.PersonID AS person_id,
   p.Name, p.SS, 
   f.FearID AS fear_id,
   f.Fear 
   FROM person_fear AS pf 
      LEFT JOIN persons AS p ON pf.PersonID = p.PersonID 
      LEFT JOIN fears AS f ON pf.PersonID = f.FearID 
   WHERE f.FearID = pf.FearID AND p.PersonID = pf.PersonID
于 2014-08-30T08:32:56.193 回答
12
Select Persons.Name, Persons.SS, Fears.Fear
From Persons
LEFT JOIN Persons_Fear
ON Persons.PersonID = Person_Fear.PersonID
LEFT JOIN Fears
ON Person_Fear.FearID = Fears.FearID;
于 2018-06-06T20:12:23.597 回答
11
Select 
    p.Name,
    p.SS,
    f.fear
From
    Persons p
left join
        Person_Fear pf
    inner join
        Fears f
    on
        pf.fearID = f.fearID
 on
    p.personID = pf.PersonID
于 2013-04-25T18:35:51.117 回答
0
SELECT p.*, f.Fear
FROM Persons p
LEFT JOIN Person_Fear pf ON pf.PersonID = p.PersonID
LEFT JOIN Fears f ON f.FearID = pf.FearID
ORDER BY p.PersonID

  1. 您需要从Persons表中进行选择,以确保为每个人生成一行,无论他们是否有恐惧。
  2. 然后你可以让Person_Fear每个人都加入,NULL如果他们没有任何条目(如你所愿)。
  3. 最后,您离开加入FearsPerson_Fear以便您可以选择恐惧的名称。
  4. 或者,添加一个订单,以便每个人都将他们所有的恐惧列在一起,即使他们是Person_Fear在不同的时间被添加到表格中的。
于 2020-09-20T22:04:54.023 回答