首页 > 解决方案 > 仅当 SQL 中存在记录时加入才有效

问题描述

我有 2 张桌子 - table1 和 table2。

在表 2 中,表 1 有多个记录匹配条件,基于:

c_type、h_level、循环、e_id

仅当存在 EXACT 1 匹配时,我才需要 RIGHT 表中的记录。如果不是,element_nm 应该为 NULL,所以我在输出中的记录与左表完全相同。

SELECT   a.*,
         b.element_nm
FROM     table1 a
   LEFT JOIN table2 b ON
         a.c_type = b.c_type
   AND   a.h_level = b.h_level
   AND   a.loop = b.loop
   AND   a.e_id = b.e_id
ORDER BY a.file_name,
         a.line_num asc;

标签: sqloracle

解决方案


由于这只是一个值,您可以在 select 子句中使用 Sub 查询。否则,您将在 aLEFT OUTER JOIN或使用中使用子查询OUTER APPLY

SELECT 
  t1.*,
  (
    SELECT MIN(t2.element_nm)
    FROM table2 t2
    WHERE t2.c_type = t1.c_type
      AND t2.h_level = t1.h_level
      AND t2.loop = t1.loop
      AND t2.e_id = t1.e_id
    HAVING COUNT(*) = 1
  ) AS element_nm
FROM table1 t1
ORDER BY t1.file_name, t1.line_num;

推荐阅读