sql - 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
解决方案
试试下面的。
我在 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 |
推荐阅读
- javascript - 无法使用 jquery-validation.js submitHandler 函数发送“multipart/form-data”表单数据
- c# - 查找用法时如何让 Resharper 列出隐式类型的变量
- arrays - 检查数组何时完成洗牌以执行某些操作
- oracle - 动态操作刷新页面中的所有报表
- php - 空值时的PHP偏移警告
- c# - System.Transactions.TransactionStateInDoubt.EndCommit(InternalTransaction tx):抛出异常 C# .Net
- javascript - OCR 扫描文件并检索元数据
- reactjs - React Formik Yup 对回调错误消息的验证不同步
- amazon-web-services - NGINX 上的指定位置路径不起作用
- c# - 声明后和乘法后双倍更改值