在SQL中显示多个不匹配的记录

时间:2016-05-03 01:15:07

标签: mysql sql

我有两张桌子。这两个表可能具有不匹配的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

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

你会得到相同的答案