首页 > 解决方案 > db2 表中的 join 语句

问题描述

我有两个带有 ID 和日期列的表。ID 和日期是两个表中的键。这些值是这样的,例如,存储具有 15 个不同日期的 ID。如何使用 join statemnet 查找两个表中相同的 ID,但第一个表中的 ID 日期不在具有相同 ID 的第二个表中?

第一个表值是

0001 1990 
0001 1991
0001 1992
0001 1993
0002 1990

第二个表值是

0001 1990  
0001 1991  
0001 1992  
0001 1993  
0001 1994  
0001 1995  
0002 1990
0002 1991

我想要加入语句返回

0001 1994 
0001 1995
0002 1991

标签: sqljoindb2key

解决方案


试试下面的。
我在 1-st 表中添加了几个值,只是为了演示。
如果您想从结果中排除 ID = '0003',因为 T2 中根本没有这样的 ID,请取消注释被推荐的块。

WITH 
  T1 (ID, DATE) AS
(
VALUES
  ('0001', 1990)
, ('0001', 1991)
, ('0001', 1992)
, ('0001', 1993)
, ('0002', 1990)

, ('0002', 2000) -- not exists in T1
, ('0003', 2000) -- ID doesn't exist in T1
)
, T2 (ID, DATE) AS
(
VALUES
  ('0001', 1990)
, ('0001', 1991)
, ('0001', 1992)
, ('0001', 1993)
, ('0001', 1994)
, ('0001', 1995)
, ('0002', 1990)
, ('0002', 1991)
)
SELECT 
  COALESCE (T1.ID, T2.ID)     AS ID 
, COALESCE (T1.DATE, T2.DATE) AS DATE  
FROM T1
FULL JOIN T2 ON T2.ID = T1.ID AND T2.DATE = T1.DATE
/*
JOIN 
(
SELECT DISTINCT T1.ID 
FROM T1 
JOIN T2 ON T1.ID = T2.ID
) I ON I.ID = COALESCE (T1.ID, T2.ID)
*/ 
WHERE T1.ID IS NULL OR T2.ID IS NULL;

结果是:

ID 日期
0001 1995
0002 1991
0001 1994
0002 2000
0003 2000

推荐阅读