首页 > 解决方案 > MySQL在匹配其他表或其中不存在时查找ID

问题描述

我有两个表,我想要一个查询来显示一个表中与第二个表匹配或根本不存在的记录。换句话说,如果记录存在于表 B 中并且与条件不匹配,则不显示它。

    TABLE A                TABLE B

    ID  VAL                ID  AID  BVAL
   ---------              ----------------
    1    v1                1    2     B1
    2    v2                2    3     B2
    3    v3

我试过这个查询:

SELECT ta.id, ta.val, tb.bval 
 FROM table_a ta
 LEFT JOIN table_b tb ON ta.id = tb.AID AND tb.BVAL = 'B1'

目标是只获得这些行:

    ID    VAL   BVAL
   ------------------
    1     v1    NULL
    2     v2     B1 

但显然,通过这个查询,我得到了所有表 A。

谢谢你的时间!

标签: mysqljoin

解决方案


我找到了解决方案,我发布它以防其他人遇到同样的问题。

SELECT ta.id, ta.val, tb.bval 
 FROM table_a ta
 LEFT JOIN table_b tb ON ta.id = tb.AID
 GROUP BY ta.id, ta.val, tb.bval
 HAVING tb.BVAL = 'B1' OR tb.BVAL IS NULL

推荐阅读