繁体   English   中英

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

[英]How to compare two different tables based on two different Columns in SQL Server?

第一个表由带有州和国家/地区信息的帐户组成,这些帐户大多数都是正确的,而错误行很少:

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)

您想加入州的两个表,并查找国家/地区不匹配的记录。 该查询将使您到达那里:

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

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

我认为您要寻找的是“不存在”。 基本上,您会在第一张表中查找第二张表中不存在的任何州/国家组合。 这是一个例子。

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
)

请尝试这个。 如果需要任何更改,可以更改联接条件。

数据

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM