如何基于SQL Server中的两个不同列比较两个不同的表?

时间:2018-01-09 15:18:04

标签: sql sql-server sql-server-2008

第一个表包含具有状态和国家/地区信息的帐户,这些信息大多数都是正确的,但行数很少:

ID   NAME            State                  Country
--------------------------------------------------
1    Account 1       NJ                     USA
2    Account 2       NY                     NULL
3    Account 3       Beijing                Japan

我有第二个表,它具有正确的状态和县信息,第一个表需要与之比较:

State_Code        State     Country_Code       Country
-------------------------------------------------------
01                NJ          A01               USA
02                NY          A01               USA
03                Beijing     c01               China  

查询应检查第一个表中的状态是否存在于第二个表中,如果存在,是否与正确的国家/地区相关联,结果将是一个包含错误信息的行表:

所以在我的例子中,比较应该给我结果:

ID     NAME         State                  Country
------------------------------------------------------
 2     Account 2    NY                     NULL
 3     Account 3    Beijing                Japan

我是一个初学者,试图了解更多有关SQL的知识,我尝试使用左连接和外连接来解决这个问题,但这两个问题都没有给出正确的结果。如果有人能指出我正确的方向,或者给我一个如何处理这个问题的例子,我将非常感激。

(我正在使用Microsoft SQL Server Management Studio)

3 个答案:

答案 0 :(得分:0)

您想要加入状态中的两个表,并查找国家/地区不匹配的记录。这个查询可以帮助你:

SELECT t1.*, t2. Country AS Expected
FROM table1 t1
JOIN table2 t2 ON t1.State = t2.State
WHERE t1.County != t2.Country

不幸的是,我不知道你的表名,所以我只需要使用table1和table2,但希望这能为你提供所需。我还添加了预期的国家/地区,但如果您不需要,我可以将其删除。

答案 1 :(得分:0)

我认为你正在寻找的是"不是EXESTS"。基本上,您在第一个表中查找不存在于第二个表中的任何州/国家组合。这是一个例子。

SELECT tbo.ID, tbo.NAME, tbo.STATE, tbo.COUNTRY
FROM TableOne tbo
WHERE NOT EXISTS(
    SELECT * FROM TableTwo tbt
    WHERE tbo.State = tbt.State
        AND tbo.Country = tbt.Country
)

答案 2 :(得分:0)

请试试这个。如果需要更改,可以更改连接条件。

数据

CREATE TABLE firstTable
(
     ID  INT    
    ,NAME    VARCHAR(10)           
    ,State    VARCHAR(10)                    
    ,Country VARCHAR(10)     
)
GO

INSERT INTO firstTable VALUES
(1    ,'Account 1','NJ','USA'),
(2    ,'Account 2','NY',NULL),
(3    ,'Account 3','Beijing','Japan')
GO

CREATE TABLE SecondTable
(
     State_Code  VARCHAR(10)     
    ,State      VARCHAR(10)
    ,Country_Code      VARCHAR(10)
    ,Country VARCHAR(10)
)
GO

INSERT INTO SecondTable VALUES
('01','NJ'          ,'A01','USA'),
('02','NY'          ,'A01','USA'),
('03','Beijing'     ,'c01','China')  
GO

<强>解

select f.* from firstTable f
FULL JOIN SecondTable s
ON f.State = s.State and f.Country = s.Country
WHERE f.State IS NOT NULL AND ( s.Country_Code IS NULL OR s.State IS NULL ) 

<强>输出

ID          NAME       State      Country
----------- ---------- ---------- ----------
2           Account 2  NY         NULL
3           Account 3  Beijing    Japan

(2 rows affected)