如何在单条ANSI SQL查询中筛选数据并进行条件组合
标准ANSI SQL实现字段匹配与结果列生成
现有表结构与数据
表T1
| V | H |
|---|---|
| a | q |
| s | w |
| d | e |
| f | r |
表T2
| VH |
|---|
| a |
| w |
| d |
| e |
期望输出结果
| V | H | RES |
|---|---|---|
| a | q | V |
| s | w | H |
| d | e | B |
需求说明
筛选出T1中V或H(或两者)存在于T2.VH的行,并新增RES列:
- 若T1.V存在于T2.VH,RES值为'V'
- 若T1.H存在于T2.VH,RES值为'H'
- 若两者都存在于T2.VH,RES值为'B'
标准ANSI SQL语句
SELECT t1.V, t1.H, CASE WHEN t1.V IN (SELECT VH FROM T2) AND t1.H IN (SELECT VH FROM T2) THEN 'B' WHEN t1.V IN (SELECT VH FROM T2) THEN 'V' WHEN t1.H IN (SELECT VH FROM T2) THEN 'H' END AS RES FROM T1 WHERE t1.V IN (SELECT VH FROM T2) OR t1.H IN (SELECT VH FROM T2);
语句逻辑说明
- WHERE子句:过滤出T1中V或H存在于T2的行,确保只保留符合条件的记录
- CASE表达式:按优先级判断匹配情况:
- 优先判断V和H都在T2中的场景,返回'B'
- 再判断仅V在T2中的场景,返回'V'
- 最后判断仅H在T2中的场景,返回'H'
内容的提问来源于stack exchange,提问作者Serge Roussak
相关产品推荐
相关产品推荐

