mysql - 是否有两个数据库字段同时被使用?

标签 mysql sql group-by

我有这个问题,我无法解决。类似于:假设我有一个包含船舶信息的表;有一个 ship_id 列,以及关于每艘船的许多行。现在,有两个类似的数字属性:attr1attr2

一次考虑一艘船,有时 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/

相关文章:

mysql - 什么样的数据库或者在mysql中实现的方式

php - 数据库查询总是返回 TRUE

mySQL比较数字

mysql - 创建函数时出现语法错误

python - 将重复行添加到 DataFrame

sql - 基于 GROUP BY 结果的多重自连接

mysql - SQL 在另一个 groupby 之上做一个 groupby

php - 自动递增字母数字序列

mysql - 子查询为插入查询返回多于 1 行,即使它没有任何子查询

mysql - 如何使用依赖注入(inject)在 golang 中正确设置 defer .close