【问题标题】:How can I get only the data that do not match如何仅获取不匹配的数据
【发布时间】:2020-12-03 14:43:21
【问题描述】:

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

【问题讨论】:

    标签: teradata teradata-sql-assistant teradata-covalent teradatasql


    【解决方案1】:

    你已经接近了:

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

    【讨论】:

    • 谢谢先生。我试过后会告诉你的。
    【解决方案2】:

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

    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
        )
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-28
      • 1970-01-01
      • 2019-01-08
      相关资源
      最近更新 更多