簡體   English   中英

如何僅獲取不匹配的數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM