你好,我在SQL或MySQl中寻找关于比较同一表中的行的查询
该查询应显示具有相同 id 但列中具有不同记录的最后 2 行
我的桌子
ID|is_superuser|username|first_name|last_name|email |is_staff|is_active|
1| 1|admin |FC | |admin@admin.com| 1| 1|
1| 1|admin | | |admin@admin.com| 1| 1|
1| 1|admin |adminname | |admin@admin.eu | 1| 1|
结果:
ID|username|first_name|email|
1|admin |adminname |admin@admin.eu|
1|admin | |admin@admin.com|
感谢帮助
您可以使用exists
子句来要求有另一行具有相同id
但具有不同email
:
select *
from MyTable t1
where exists
(
select *
from MyTable t2
where t1.id = t2.id
and coalesce(t1.email, '') <> coalesce(t2.email, '')
)
根据您的注释,如果有很多列,则可以使用如下所示的查询生成where
子句:
select concat('and coalesce(t1.', column_name, ', '''') <> coalesce(t2.',
column_name, ', '''')')
from information_schema.columns
where table_name = 'MyTable'