第一个表包含具有状态和国家/地区信息的帐户,这些信息大多数都是正确的,但行数很少:
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)
答案 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)