【问题标题】:how to find unmatched record from one table如何从一张表中找到不匹配的记录
【发布时间】:2014-07-19 10:23:23
【问题描述】:

我有一张桌子学生。

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=umnn@gmail.com 的值,不应该是年龄和地址。

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

像这样第一行和第二行应该匹配,并且应该只给出第二行的值 id,name,age,email。

【问题讨论】:

  • 你怎么能说第一和第二场比赛?
  • 我的问题是比较两行?请告诉我任何线索。
  • 请编辑您的问题并提供示例输出。

标签: php mysql


【解决方案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

【讨论】:

  • 它很有用,但它只匹配最后一行和倒数第二行。但我想要历史上所有无与伦比的结果。它应该匹配第 2 行和第 3 行,依此类推。请注意:ID 可能是随机的,例如 1,5,9,10,23
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-22
  • 2011-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多