我有这个问题,我无法解决。与此类似:假设我有一个表格,上面有关于船只的信息;有一个ship_id
列,每艘船都有很多行。现在,有两个相似的数值属性,分别为attr1
和attr2
。
一次考虑一艘船,有时attr1
对于所有船行都有一个值,而attr2
有多个值,例如1, 2, 3, ...
。有时attr2
具有单个值,而attr1
具有多个值。如何检查是否有两个属性都不同的船??
这是一个示例表,以防万一:
ship_id attr1 attr2 ...
101 1 10
101 1 11
101 1 15
101 1 20
...
201 5 200
201 6 200
201 15 200
201 20 200
...
在这里,
attr1
对于船101来说永不变化,而attr2
对于船201则永不变化。我想找到两个属性都可以变化的船。我写了以下内容,它可以正常运行,但是我不确定它是否在执行我的预期。分组+ DISTINCT使我头晕目眩...
SELECT ship_id, count(DISTINCT attr1) as c1, count(DISTINCT attr2) as c2
FROM ships
GROUP BY ship_id
HAVING c1 > 1 and c2 > 1;
最佳答案
如果我理解正确,则可以使用EXISTS
:
SELECT s.*
FROM ships s
WHERE EXISTS (SELECT 1
FROM ships s1
WHERE s1.ship_id = s.ship_id AND s1.attr1 <> s.attr1 AND s1.attr2 <> s.attr2
);