0

我有下面的查询,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;
4

2 回答 2

0

你很接近:

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,这两个版本都将失败。

于 2020-08-13T17:59:21.260 回答
0

根据您的描述,我认为这是正确的逻辑:

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
    )
)
于 2020-08-18T22:49:09.157 回答