当前位置: 首页 > 知识库问答 >
问题:

MySQL选择左连接为空的行

长孙智刚
2023-03-14

我有这些MySQL表:

表1:

id | writer
1  | Bob   
2  | Marley
3  | Michael

表2:

user_one | user_two
   1     | 2

而这个查询:

SELECT table1.id FROM table1 LEFT JOIN table2 ON table1.id = table2.user_one

此查询将返回table1中1,2,3的所有行

我只想选择在左关节中找不到的行。因此,它应该只返回id为3

我想要一种与内部联接相反的方式,它将只选择联接中找到的行。如何获得相反的方式,比如如果存在左联接,忽略它并移动到下一行。希望我很清楚

共有3个答案

莫乐
2023-03-14

下面是一个查询,它只返回在表2user_oneuser_two两列中未找到对应项的行:

SELECT T1.*
FROM table1 T1
LEFT OUTER JOIN table2 T2A ON T2A.user_one = T1.id
LEFT OUTER JOIN table2 T2B ON T2B.user_two = T1.id
WHERE T2A.user_one IS NULL
    AND T2B.user_two IS NULL

每列有一个连接(user_oneuser_two),查询只返回没有匹配连接的行。

希望这对你有帮助。

乜建柏
2023-03-14

如果您不想从table2返回任何列,最好的方法之一是使用not EXISTS

SELECT  table1.id 
FROM    table1 T1
WHERE
  NOT EXISTS (SELECT *
              FROM table2 T2
              WHERE T1.id = T2.user_one
                  OR T1.id = T2.user_two)

从语义上讲,这表示您要查询的内容:选择第二个表中没有匹配记录的每一行。

MySQL针对EXISTS进行了优化:一旦找到第一条匹配的记录,它就会返回。

昌招
2023-03-14

您可以使用以下查询:

SELECT  table1.id 
FROM    table1 
        LEFT JOIN table2 
            ON table1.id IN (table2.user_one, table2.user_two)
WHERE   table2.user_one IS NULL;

不过,根据表2上的索引,您可能会发现两个联接的性能更好:

SELECT  table1.id 
FROM    table1 
        LEFT JOIN table2 AS t1
            ON table1.id = t1.user_one
        LEFT JOIN table2 AS t2
            ON table1.id = t2.user_two
WHERE   t1.user_one IS NULL
AND     t2.user_two IS NULL;

 类似资料:
  • 问题内容: 我有这些MySQL表: 表格1: 表2: 而这个查询: 此查询将返回table1的所有行,即1,2,3 我只想选择在左关节中找不到的行。所以它应该只返回ID为ID的行 我想要与INNER JOIN相反,它将仅选择在联接中找到的行。如何获得相反的结果(例如是否存在左联接),忽略它并移至下一行。希望我明白 问题答案: 您可以使用以下查询: 虽然,根据您的索引,您可能会发现两个联接的性能更好

  • 问题内容: 我遇到一个问题,当我尝试选择某个列的值为NULL的行时,它将返回一个空集。但是,当我查看phpMyAdmin中的表时,对于大多数行,它表示为null。 我的查询看起来像这样: 每次都清空。 据说有很多地方都确保不会将其存储为“ NULL”或“ null”,而不是实际值,还有一个地方试图仅查找空格(),但没有一个起作用。有人建议不要使用MyISAM并使用innoDB,因为MyISAM无法

  • 问题内容: 在MySQL中,是否只能选择存在某些内容的列? 例如,我有以下查询: 我试图仅选择电话以813开头并且phone2中包含某些内容的行。 问题答案: 比较空字符串的值: 请注意,值解释为。

  • 我想返回每个行,并为和提供空值,如果它们没有。当我执行此查询时,我得到空结果。如果我使用而不是,我得到不正确的结果。如何过滤左连接,以便如果没有匹配,我仍然得到返回的p行与和的空值? 注:我在末尾添加了,仅用于测试目的。

  • 我正在尝试从表中选择一行,其中: 具有最小UUID 未在其他表中引用 但是,当我试图实施第一个约束时,我遇到了问题。 下面是在整数上按预期工作的所有内容:首先,创建如下所示的表: 和 现在,我想选择中具有最低的行,它在中不显示为外键。我想选择中具有并且按预期工作的行: 但是,当我对UUID进行同样的尝试时,最终查询根本无法返回任何内容。请注意,我已经使用这篇文章的答案来定义一种查找最小UUID的方

  • 本文向大家介绍简单谈谈mysql左连接内连接,包括了简单谈谈mysql左连接内连接的使用技巧和注意事项,需要的朋友参考一下 前言 最近忙着开发x省冷链追溯系统,天天干到晚上十一点多才回到家,周末也加班,没啥时间写博客,闲下来再好好写写 业务: sql语句统计出入库数据。 问题: 只统计了X端入库单。 原因: 没有发现X端的数据库中只有入库单是有a字段数据而出库单是没有的,并使用了a字段去inner