筛选其他列中具有相同外键和不同值的记录

  • 本文关键字:记录 筛选 其他 mysql inner-join
  • 更新时间 :
  • 英文 :


我的目标是从所有存在多次的记录中SELECTFOREIGN 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

请参阅演示。

最新更新