我要疯了。当我用谷歌搜索“左连接不起作用”时,得到的结果数量似乎每个人都遇到了同样的问题。我已经研究了所有这些,尽管尽了最大努力,我还是无法解决我的具体问题。请帮忙。
我有两张 table ;一个animals_Table 和一个animalMilestones_Table。
animals_Table 中的一些动物在animalMilestones_Table 中有摄入量记录,而有些则没有。我想连接animalID 上的两个表,并显示animals_Table 中的所有行,包括那些在animalMilestones_Table 中没有匹配的“Intake”记录的行。
以下是我尝试过的两件事,我认为它们会给成功带来最好的机会,但可惜的是,两者都不起作用。
SELECT animals_Table.animalID, animalMilestones_Table.milestoneType
FROM animals_Table
LEFT JOIN animalMilestones_Table ON animals_Table.animalID=animalMilestones_Table.animalID
WHERE animalMilestones_Table.milestoneType="Intake"
SELECT animalID
FROM animals_Table
LEFT JOIN (SELECT milestoneType
FROM animalMilestones_Table
WHERE animalMilestones_Table.milestoneType = "Intake")
ON animals_Table.animalID = animalMilestones_Table.animalID
最佳答案
在我看来,您想要 [animals_Table] 中的所有 [animalID] 值的列表以及指示 [animalID] 是否具有等于“摄入量”的“里程碑”的列。如果是这样,那么我建议这样做:
SELECT at.animalID, amt.milestoneType
FROM
animals_Table at
INNER JOIN
animalMilestones_Table amt
ON at.animalID = amt.animalID
WHERE amt.milestoneType = 'Intake'
UNION
SELECT animalID, NULL AS milestoneType
FROM animals_Table
WHERE animalID NOT IN (
SELECT animalID
FROM animalMilestones_Table
WHERE milestoneType = 'Intake'
)
ORDER BY 1
想想看,这也应该有效,而且可能会更快:
SELECT at.animalID, amt.milestoneType
FROM
animals_Table at
LEFT JOIN
(
SELECT animalID, milestoneType
FROM animalMilestones_Table
WHERE milestoneType = 'Intake'
) amt
ON at.animalID = amt.animalID
关于sql - 左连接包括 where 条件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24557795/