MySQL LEFT JOIN 3表

Joe*_*Joe 60 mysql sql join

我有3张桌子:

Persons (PersonID, Name, SS)
Fears (FearID, Fear)
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 
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?

Ant*_*t P 77

您试图加入Person_Fear.PersonIDPerson_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
Run Code Online (Sandbox Code Playgroud)

这通过中间表连接Persons到.因为之间的连接和是一个,你会得到所有记录.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
Run Code Online (Sandbox Code Playgroud)

  • @AntP 在我看来,当你开始问这样的问题时,你正在深入研究过早优化的类别。让你的索引井井有条,不要为细节而烦恼。一个好的查询优化器可能会为每个查询生成一个非常相似的查询计划。 (2认同)

ech*_*_Me 22

试试这个

    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
Run Code Online (Sandbox Code Playgroud)


Tan*_*tel 17

试试这个绝对有效.

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
Run Code Online (Sandbox Code Playgroud)


Ahe*_*eho 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
Run Code Online (Sandbox Code Playgroud)


小智 9

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;
Run Code Online (Sandbox Code Playgroud)

  • 这是很实际的答案。你们应该停止劝阻新手。如果您发现它也是代码自己添加一些评论 (2认同)