我的目标是从所有存在多次的记录中SELECT
和FOREIGN KEY
,这些记录具有相同的外键,并且在其他两个特定列(颜色、价格(中至少有一个差异。
例如,我有下表项目
fk_id | color | price
-------+---------+-------
1 | black | 50
1 | red | 100
1 | blue | 75
2 | red | 100
2 | red | 100
3 | black | 50
3 | blue | 75
4 | green | 50
5 | blue | 75
5 | blue | 70
所需的结果是
fk_id
-----
1
3
5
到目前为止我所做的:
SELECT DISTINCT a.fk_id
FROM items a
JOIN items b
ON a.fk_id = b.fk_id
WHERE a.color <> b.color
OR a.price <> b.price
有没有其他解决方案或更好的方法来实现它?
SELECT fk_id
FROM table
GROUP BY fk_id
HAVING COUNT(DISTINCT color) > 1 -- or COUNT(DISTINCT color, price)
首先过滤表以删除所有重复的行,然后在HAVING
子句中使用条件为COUNT(*) > 1
的聚合:
SELECT fk_id
FROM (SELECT DISTINCT * FROM items) t
GROUP BY fk_id
HAVING COUNT(*) > 1
请参阅演示。