如何比较两个表中一行中的字段并返回不同的值

时间:2014-03-27 16:13:04

标签: mysql sql database codeigniter

属性

ID    Name   lastname
1     jhon   lee
2     luis   perez
3     maria  gonzales
4     jose   victoria

properties_ap

ID_ap ID    Name   lastname
10    2     manuel perez
11    4     jose   salazar
12    1     jhon   lee
13    3     maria  gonzales

我喜欢按ID比较行,返回不相同的值。 例如:

ID    Name    Name
2     Luis    manuel

ID    Lastname   Lastname
4     victoria   salazar

我将根据个人ID进行搜索。所以没有必要做一个循环。 我使用mysql和codeigniter。

我喜欢比较单个行,以便我可以看到哪些字段不同。

2 个答案:

答案 0 :(得分:1)

您的问题不是100%明确,但我假设您要查找属性表中的ID与properties_ap表中的ID匹配的任何数据,但名字或姓氏不同。那是对的吗?如果是这样,这就是......

SELECT p.ID, p.Name, p.LastName, ap.ID, ap.Name, ap.LastName
FROM properties p
JOIN properties_ap ap
ON p.ID = ap.ID
WHERE p.Name != ap.Name OR p.LastName != ap.LastName

答案 1 :(得分:0)

最好的SQL构造是full outer join,但MySQL并不支持它。这是使用union all的方法。它将为非匹配返回两个值集:

select which, ID, Name, Lastname
from ((select 'p' as which, ID, Name, lastname
       from properties
      ) union all
      (select 'pa' as which, ID, Name, lastname
       from properties_ap
      )
     ) p
group by id, name, lastname
having count(*) = 1;