sql - 左连接包括 where 条件不起作用

标签 sql vb.net ms-access left-join

我要疯了。当我用谷歌搜索“左连接不起作用”时,得到的结果数量似乎每个人都遇到了同样的问题。我已经研究了所有这些,尽管尽了最大努力,我还是无法解决我的具体问题。请帮忙。

我有两张 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/

相关文章:

mysql - 如何进行 Access 内连接

mysql - 使用 MySql 将 COUNT 语句的输出插入到表中。

mysql - 使用 n :m-relation 复制数据集

mysql - 如何在 SELECT 子句中使用子查询?

database - 我可以在 Access 中编辑自动编号列吗?

java - 从 java 连接到 MS Access

sql - 在 PostgreSQL 中显示多列的每月总计

mysql - 表mysql中没有任何关系的一对多映射

asp.net-mvc - 服务器使用标准 asp.net mvc 发送事件(事件源)导致错误

vb.net - 等待安装项目在 .NET 中关闭