SQL比较行显示同一表中列的差异

时间:2017-08-07 11:26:06

标签: mysql sql compare rows

您好我在SQL或MySQl中查找有关比较同一表中的行的查询

该查询应显示2个具有相同ID但在列中具有不同记录的最后一行

我的表

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|

THX寻求帮助

1 个答案:

答案 0 :(得分:0)

您可以使用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'