我正在寻找生成一个报告,我需要根据源列比较mysql表中的记录,并且当源列之外的记录具有不同的值时,会显示不同的记录和状态。
例如,给出下表: Raw 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')
但是我对如何找到不同的记录感到有点迷失。
感谢。
答案 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 );