我希望生成一个报告,我需要根据源列比较 mysql 表中的记录,并且当记录除了源列之外具有不同的值时,显示不同的记录和状态。
例如,给出下表: Raw values
我们将得到以下输出:
显示乔是因为不同来源的记录给出了不同的配偶。鲍勃和马克没有显示,因为两个来源都为他提供了相同的数据。显示欧内斯特是因为只有一个来源拥有他的信息。
查找一个源中存在但另一源中不存在的记录似乎相当简单,例如:
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')
但是我对如何查找不同的记录有点迷失。
谢谢。
最佳答案
识别在不同来源上具有不同工作或配偶值(value)观的姓名。使用 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 );
关于mysql - 查询为表中的不同值生成报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49867242/