You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写LEFT JOIN语句保留左表全量行并筛选右表指定条件?

如何编写满足LEFT JOIN且筛选关联表特定条件的SQL语句?

数据表结构与数据

Table1

Id1Phrase
1Hello
2Bye
3Thanks

Table2

Id2ColorShape
1GreenSquare
3YellowCircle
3BlueSquare

需求

执行LEFT JOIN关联两张表,保留Table1的全部行,同时仅匹配Table2中Shape='Square'的记录,预期返回结果:

1   Hello   Green
2   Bye     NULL
3   Thanks  Blue

现有查询的问题

  • Query 1:未对Table2的Shape做筛选,返回了所有关联记录,不符合要求:
    SELECT Id1, Phrase, Color
    FROM Table1
    LEFT JOIN Table2 ON Id2 = Id1
    
  • Query 2:把Shape='Square'放在WHERE子句中,会丢失Table1中无符合条件关联的行(比如Id1=2),因为LEFT JOIN后这些行的Shape字段为NULL,WHERE条件会直接排除它们:
    SELECT Id1, Phrase, Color
    FROM Table1
    LEFT JOIN Table2 ON Id2 = Id1
    WHERE Shape = 'Square'
    

正确的SQL语句

将筛选条件放到LEFT JOIN的ON子句中,而不是WHERE子句:

SELECT Id1, Phrase, Color
FROM Table1
LEFT JOIN Table2 
  ON Id2 = Id1 
  AND Shape = 'Square'

原理说明

LEFT JOIN的ON子句既定义关联规则,也可以用来过滤要关联的Table2记录——这样只会匹配Table2中符合Shape='Square'的行,同时完整保留Table1的所有记录。对于Table1中找不到对应符合条件Table2记录的行,Table2的字段会显示为NULL,完全符合预期需求。

内容的提问来源于stack exchange,提问作者Ash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 09:39:56