Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用UNION条件进行SQL查询比较_Sql_Sql Server - Fatal编程技术网

使用UNION条件进行SQL查询比较

使用UNION条件进行SQL查询比较,sql,sql-server,Sql,Sql Server,在同事们的帮助下,我编译了以下sql代码,以比较和删除出现在两个表中的记录 WITH cmn AS ( SELECT a.CDC_TYPE FROM tabled a INNER JOIN tablee b ON a.COUNTRY_ID = b.COUNTRY_ID AND a.PK_LOYALTYACCOUNT = b.PK_LOYALTYACCOUNT AND a.

在同事们的帮助下,我编译了以下sql代码,以比较和删除出现在两个表中的记录

WITH cmn AS 
(
    SELECT a.CDC_TYPE
    FROM tabled a 
    INNER JOIN tablee b ON a.COUNTRY_ID = b.COUNTRY_ID
                        AND a.PK_LOYALTYACCOUNT = b.PK_LOYALTYACCOUNT 
                        AND a.CDC_TYPE = 'U'
)
SELECT 
    1 AS is_deleted, 
    a.* 
FROM
    tabled a 
INNER JOIN 
    cmn ON a.CDC_TYPE = cmn.CDC_TYPE 

UNION ALL 

SELECT 
    0 AS is_deleted, 
    b.* 
FROM
    tablee b 
INNER JOIN 
    cmn ON b.CDC_TYPE = cmn.CDC_TYPE
示例数据来自下表:

查询的预期结果应该如下所示:

但是,输出如下所示:

有人能告诉我哪里出了问题吗


谢谢

您应该将查询写为:

; with cmn as 
  ( SELECT a.CDC_TYPE,
           a. PK_LOYALTYACCOUNT, --Add these also in CTE result set 
           a.COUNTRY_ID --Add these also in CTE result set 
    FROM    a  
    INNER JOIN  b  
    ON a.COUNTRY_ID = b.COUNTRY_ID 
    AND a.PK_LOYALTYACCOUNT = b.PK_LOYALTYACCOUNT  
    AND a.CDC_TYPE = 'U'
    )
 SELECT 1 AS is_deleted, 
        a.*  
 FROM    a  
 INNER JOIN cmn  
 ON a.CDC_TYPE = cmn.CDC_TYPE 
 and  a.COUNTRY_ID = cmn.COUNTRY_ID  
 AND a.PK_LOYALTYACCOUNT = cmn.PK_LOYALTYACCOUNT

 UNION ALL  
 SELECT 0 AS is_deleted, 
        b.*  
 FROM    b  
 INNER JOIN cmn  
 ON b.CDC_TYPE = cmn.CDC_TYPE 
 and b.COUNTRY_ID = cmn.COUNTRY_ID 
 AND b.PK_LOYALTYACCOUNT = cmn.PK_LOYALTYACCOUNT
当您仅从CTE返回CDC_类型“U”并再次将该值与表a和表b联接时,它实际上会分别与表a和表b的所有行相乘,因为它们都符合条件a.CDC_类型=cmn.CDC_类型。为了避免获得所有结果,您应该在CTE结果集中包括PK_忠诚度帐户和国家ID。

连接条件在a.CDC_TYPE=cmn.CDC_TYPE=>U'='U'=>交叉连接上没有任何意义我得到了以下错误:无效的对象名'a'选择a.CDC_类型,-我应该说我是一个新手。我粘贴了你的脚本,完全一样,但我一直得到相同的错误:Deepshikha,我很傻,我将这些表插入到代码中,它工作得很好。谢谢你,最后一个相关问题。目前,记录基于CDC_类型为“U”。如果CDC_类型等于'U'或'D',是否有任何简单的代码修改来获得相同的结果?而不仅仅是“U”?再次感谢您的帮助,查询不会将自身限制为属性CDC_TYPE中的值。表a和表b中CDC_类型、PK_忠诚度账户和国家ID相同的所有记录将与表a中的记录一起出现,表b中的1已删除,0已删除。