查询以生成表中不同值的报告

时间:2018-04-16 22:36:25

标签: mysql

我正在寻找生成一个报告,我需要根据源列比较mysql表中的记录,并且当源列之外的记录具有不同的值时,会显示不同的记录和状态。

例如,给出下表: Raw values

我们会得到以下输出:

Report values

乔被证明是因为不同来源的记录给不同的配偶。 Bob和Mark没有显示,因为两个来源都有相同的数据。显示欧内斯特是因为只有一个消息来源有他的信息。

要查找存在于一个源中但不在另一个源中的记录看起来相当简单,例如:

SELECT 'New' as `Status`, f.* FROM (select * from tbl where tbl.Source='facebook') where `Name` not in (SELECT `Name` FROM select * from tbl where tbl.Source='linkedin')

但是我对如何找到不同的记录感到有点迷失。

感谢。

1 个答案:

答案 0 :(得分:0)

识别在不同来源上具有不同作业或配偶值的名称。使用UNION ALL将它们与仅在一个来源中发布的新名称相结合。

select 
'Different' status,
 t1.name,
 t1.job,
 t1.spouse,
 t1.source
FROM 
 tbl t1 
WHERE 
 EXISTS (SELECT 1 FROM tbl t2 WHERE t2.name = t1.name AND t2.source <> t1.source AND 
                         (t2.job <> t1.job OR t2.spouse <> t1.spouse ))
UNION ALL 
SELECT 
'New',
 name,
 job,
 spouse,
 source
FROM tbl t1
WHERE NOT EXISTS (SELECT 1 FROM tbl t2 WHERE t2.name = t1.name
                  AND t2.source <> t1.source );