【问题标题】:MySQL: How to SELECT a row from the 1st table if there is no matching row in the 2nd tableMySQL:如果第二张表中没有匹配的行,如何从第一张表中选择一行
【发布时间】:2018-04-30 05:58:21
【问题描述】:

表1(数字主键):

  • id-1, number-123, name-asd
  • id-2, number-124, name-asd

表2(编号可重复,id pk):

  • id-1, number-123, name-asd
  • id-2, number-123, name-das
  • id-3, number-124, name-rrr
  • id-4, number-124, name-asx

想要的输出:

124, asd

我必须将第一个表的行与第二个表中的行进行比较。

如果第一行不等于第二行中的每一行a.number = b.number,那么我们应该执行select * from table1

如果我们找到匹配的行(在表 1 和表 2 之间),那么我们不应该执行上面找到的选择查询。

更新: 我怎样才能比较 3 个这样的表?

【问题讨论】:

    标签: mysql select join compare


    【解决方案1】:

    一个简单的选择左连接两个表,并过滤第二个表没有数据的行应该会得到你想要的结果。

    SELECT *
    FROM table1 a
    LEFT JOIN table2 b
        ON a.number = b.number AND a.name = b.name
    WHERE b.id IS NULL
    

    【讨论】:

    • 对于 number = 124 它应该只输出一行,因为对于 number = 124 AND name = asd,两者之间没有任何匹配项。
    • 看起来可以正常工作:)) 如果没有 where b.id is null 它给了我错误你能解释一下 Where b.id is NULL 是如何工作的吗?
    • 因为它使用左连接,所以第一个表中的所有行都将被包括在内。 WHERE b.id IS NULL 删除 ON 子句在第二个表中没有找到匹配行的任何行。对于表 1 返回的行,表 2 中的列都将为空。
    • 不要;如果它对你有用,别忘了接受答案。
    • 我应该点击下面的“回答您的问题”吗?或者怎么做?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    相关资源
    最近更新 更多