我有两张桌子。这两个表可能具有不匹配的ID。但是,它们也可能具有不匹配的名称或地址。我需要能够从我的列表中过滤掉ID&#first_name,last_name和street_1。我可以在匹配ID上进行加入,但有时它们匹配,但其他列可能包含与我需要显示的记录不匹配的记录。
查找不匹配的ID。如果它们匹配,请查看是否有任何其他字段不匹配。
以下是我期望的结果:
id first_name_2 last_name_2 street_1 street_2
3 Teresa White 834 Green Ridge Hill 43 Arapahoe Park
6 Rebecca George 39157 Nelson Hill 7467 Acker Center
7 Ann Hawkins 341 Tennessee Street 8 Bunting Street
8 Joyce Moreno 0277 Bunker Hill Drive 6 Nancy Center
9 Kimberly Alvarez 57332 Di Loreto Lane 0437 Waubesa Avenue
ID 3& 6在列表中,因为姓氏不匹配。 ID 7是姓氏和street_1。 ID 8& 9 ID不匹配。
以下是我的示例数据供参考:http://sqlfiddle.com#!9/928568/2
答案 0 :(得分:1)
我会执行以下操作:左连接并将空值视为空字符串。如果你有一个合法的空字符串,例如street_2,它可能会返回误报:
SELECT *
FROM information I1
LEFT JOIN information_2 I2 ON I1.id = I2.id
WHERE ( I1.first_name_2 <> ifnull(I2.first_name_2, '')
OR I1.last_name_2 <> ifnull(I2.last_name_2, '')
OR I1.street_1 <> ifnull(I2.street_1, '')
OR I1.street_2 <> ifnull(I2.street_2, '')
);
答案 1 :(得分:0)
您好我浏览了示例数据参考,我认为您的要求是要查找第二个表格中没有精确副本的所有元组
您可以使用以下 SQL 代码我在您的Feed上对此进行了测试,并且它提供了预期的结果
SELECT
i.id, i.first_name_2, i.last_name_2, i.street_1, i.street_2
FROM
information i
LEFT JOIN
information_2 i2
ON
i.id=i2.id AND i.first_name_2=i2.first_name_2 AND i.last_name_2=i2.last_name_2
AND i.street_1=i2.street_1 AND i.street_2 = i2.street_2
where
i2.id is null
如果您的数据库支持MINUS set operator ,只需编写
,还有一种简单的方法可以做到这一点SELECT * FROM information
MINUS
SELECT * FROM information_2
你会得到相同的答案