【问题标题】:MySQL join on not equal with empty right tableMySQL加入不等于空右表
【发布时间】:2017-06-14 10:01:33
【问题描述】:

我正在尝试加入两个表,其中右表可能为空。 如果它是空的,我想要左表中的所有记录。 如果它不为空,那么我想要左表中不存在于右表中的所有记录。 像这样: venn diagram

我还需要过滤结果,以便 tbl.free=1

我认为这将是一个简单的任务:

SELECT tbl1.id, tbl1.name FROM tbl1 LEFT JOIN tbl2 ON tbl1.id <> tbl2.fk1 WHERE tbl1.free=1

我得到的结果是 当 tbl2 为空时,我得到所有 free=1 的 tbl1 条目 - 这很好 当 tbl2 中有条目时,我会得到 tbl1 中的所有条目 - 与上面完全相同(不好)

我要怎么做才能做这个操作???

【问题讨论】:

  • 请发布您的表格结构。

标签: mysql join


【解决方案1】:

这是一种推测,但您可能需要在WHERE 子句中添加一个条件,以检查第二个表中的列是否为NULL,这表明第一个表中的特定记录确实存在 不匹配

SELECT tbl1.id, tbl1.name
FROM tbl1
LEFT JOIN tbl2
    ON tbl1.id = tbl2.fk1
WHERE tbl1.free = 1 AND tbl2.fk1 IS NULL

【讨论】:

  • 这就像一个魅力,我没有用 = 符号尝试过。
【解决方案2】:

一开始我误读了您的请求。您真正想要的只是 tbl1 中在 tbl2 中没有匹配项的所有记录。无需加入。只需一个 NOT EXISTSNOT IN 子句。

SELECT id, name 
FROM tbl1
WHERE id IS NOT IN (SELECT fk1 FROM tbl2);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-06
    • 2016-04-19
    • 2013-06-23
    • 2014-06-01
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多