[英]How can I get only the data that do not match
我有下面的查詢,TBL1 X 是我的源表,TBL2 Y 是我的目標表。 我只想從 TBL1 X 中獲取以下任何字段與 TBL2 Y 中的相應字段不匹配的數據。我不能 100% 確定代碼是否正確。 有人可以幫忙嗎
SELECT
Col1,
Col2,
PRESC_ID,
PRSC_NPI_N,
FROM TBL1 X
JOIN
(
SELECT
CLAIM_ID,
ColA,
ColB,
ColC,
ColD
FROM TBL2 Y
)
ON X.PHARM_ID = Y.CLAIM_ID
---- 如果滿足 X.PHARM_ID= Y.CLAIM_ID 且滿足以下任何條件,我希望返回記錄。
WHERE X.PHARM_ID= Y.CLAIM_ID
OR X.Col1 <> Y.ColA
OR X.Col2 <> Y.ColB
OR X.PRESC_ID <> Y.ColC
OR X.PRSC_NPI_N <> Y.ColD;
你很接近:
SELECT
Col1,
Col2,
PRESC_ID,
PRSC_NPI_N,
FROM TBL1 X
JOIN TBL2 AS Y
ON X.PHARM_ID = Y.CLAIM_ID
WHERE X.Col1 <> Y.ColA
OR X.Col2 <> Y.ColB
OR X.PRESC_ID <> Y.ColC
OR X.PRSC_NPI_N <> Y.ColD;
但我更喜歡相關子查詢:
SELECT
Col1,
Col2,
PRESC_ID,
PRSC_NPI_N,
FROM TBL1 X
WHERE EXISTS
( SELECT *
FROM TBL2 AS Y
WHERE X.PHARM_ID = Y.CLAIM_ID -- same ID
AND -- any other column is different
( X.Col1 <> Y.ColA
OR X.Col2 <> Y.ColB
OR X.PRESC_ID <> Y.ColC
OR X.PRSC_NPI_N <> Y.ColD
)
);
如果列包含 NULL,這兩個版本都將失敗。
根據您的描述,我認為這是正確的邏輯:
SELECT
Col1,Col2,PRESC_ID,PRSC_NPI_N
FROM TBL1 X
WHERE PHARM_ID in (
SELECT CLAIM_ID FROM TBL2 Y
where X.PHARM_ID= Y.CLAIM_ID
AND (
X.Col1 <> Y.ColA
OR X.Col2 <> Y.ColB
OR X.PRESC_ID <> Y.ColC
OR X.PRSC_NPI_N <> Y.ColD
)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.