我有这个问题,我无法解决。类似于:假设我有一个包含船舶信息的表;有一个 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
);
关于mysql - 是否有两个数据库字段同时被使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52209387/