如何从一个表中找到不匹配的记录

时间:2014-07-19 10:23:23

标签: php mysql

我有一张桌子学生。

id   | name | age | email | address
------------------------------
 1   | abc  | 20  | abc@gmail.com  |  street number10
------------------------------
 2   | def  | 25  | def@gmail.com  |  street number12
------------------------------
 3   | hjk  | 20  | hjk@gmail.com  |  street number10
------------------------------
 4   | umnnn  | 20  | umnn@gmail.com  |  street number10

我希望匹配行并希望获得无与伦比的记录。

实施例

第3行(id = 3)应与第4行(id = 4)匹配,并且只应给出第4行的不匹配值,表示id = 4,name = umnn,email = columnn @gmail.com,不应该是年龄和地址。

第2行(id = 2)应与第3行(id = 3)匹配,并且只应给出第3行的不匹配值,表示id = 3,name = hkj,age = 20,email = hkj @ gmail的值.com,地址=街道号码10。

并且应该匹配第1行和第2行,并且应该给出第2行id,名称,年龄,仅限电子邮件的值。

1 个答案:

答案 0 :(得分:1)

您可以使用自联接

执行此操作
select t1.id,case when t1.name!=t2.name then t1.name else NULL end as name 
       ,case when t1.age!=t2.age then t1.age else NULL end as age
       ,case when t1.email!=t2.email then t1.email else NULL end as email
       ,case when t1.address!=t2.address then t1.address else NULL end as address
from test t1
inner join test t2
on t1.id=t2.id+1

SQL Fiddle Demo