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

如何基于t1的shipment_type值过滤t2?含'All'场景处理

解决方案:根据t1的shipment_type过滤t2数据(支持'All'场景)

你的原SQL问题出在:当t1的shipment_type为'All'时,CASE语句没有对应分支,会返回NULL,而t2.shipment_type = NULL在SQL中永远不成立(NULL与任何值比较结果都是UNKNOWN),所以'All'场景下查不到任何数据。

下面是几种可行的修正写法:

写法一:直接用OR逻辑判断(最简洁)

SELECT t2.*
FROM t2, t1
WHERE t1.shipment_type = 'All' 
   OR t2.shipment_type = t1.shipment_type;

思路:如果t1是'All',第一个条件直接成立,返回所有t2数据;否则只匹配t2中类型与t1一致的数据。注意:如果t1有多条记录,需要确保其中只有一条有效配置(比如通过LIMIT 1或者先聚合t1的类型)。

写法二:用子查询单独获取t1的配置值

SELECT t2.*
FROM t2
WHERE 
    -- 如果t1是'All',直接返回所有数据
    (SELECT shipment_type FROM t1) = 'All'
    -- 否则匹配对应的发货类型
    OR t2.shipment_type = (SELECT shipment_type FROM t1);

思路:先通过子查询获取t1的shipment_type值,再分情况处理。适合t1只有单条配置记录的场景。

写法三:用CASE WHEN统一处理条件

SELECT t2.*
FROM t2
WHERE CASE 
    WHEN (SELECT shipment_type FROM t1) = 'All' THEN 1
    ELSE (t2.shipment_type = (SELECT shipment_type FROM t1))
END = 1;

思路:用CASE WHEN把两种情况整合到一个条件里,当t1是'All'时返回1(条件成立),否则判断t2的类型是否匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 02:52:12