SELECT p.id, p.first
FROM people p
LEFT JOIN job j ON ( p.job_id = j.id )
LEFT JOIN favourites f ON ( p.company_id = f.company_id )
WHERE p.company_id = 1
我有3张桌子。
Job
Favourites
People
每个人都有company_id
。当我尝试上述操作时,它会输出p.id
,p.first
两次。如果我删除其中一个JOIN
,则输出符合预期,但没有删除的表。
答案 0 :(得分:2)
正如我在评论中所说,你在这里只是一对一的关系,它可以准确地告诉你你在说什么。
就像你有一个关于人的注册表,你最喜欢这个人的两个最爱。澄清以下情况:
表人:
id name job_id first
1 John 1 1
2 Campos 2 2
表格工作
id job
1 Programmer
2 Developer
表格收藏夹
company_id desc
1 Blah
2 Bleh
1 Blih
在上述模型中,人们有两个最喜欢的注册表。
对于您的模型,似乎一个人只能有一份工作,但由于您没有指定表favourites
看起来像什么,所以我所展示的情况可能就是产生您的问题。因此,要快速解决它,您可以使用DISTINCT命令,如:
SELECT DISTINCT p.id, p.first
FROM people p
LEFT JOIN job j
ON ( p.job_id = j.id )
LEFT JOIN favourites f
ON ( p.company_id = f.company_id )
WHERE p.company_id = 1