我有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.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
Run Code Online (Sandbox Code Playgroud)
这通过中间表连接Persons
到.因为之间的连接和是一个,你会得到所有记录.Fears
Person_Fear
Persons
Person_Fear
LEFT JOIN
Persons
或者:
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)
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)
归档时间: |
|
查看次数: |
254591 次 |
最近记录: |