代码之家  ›  专栏  ›  技术社区  ›  alexis

两个数据库字段是否都在使用?

  •  0
  • alexis  · 技术社区  · 7 年前

    我有这个问题,我无法解决。它与此类似:假设我有一个关于船舶的信息表;有一个 ship_id 每艘船周围有很多排。现在,有两个相似的数值属性, attr1 attr2 .

    属性1 所有ship行都有一个值,并且有多个值 属性2 ,例如。 1, 2, 3, ... . 有时 只有一个值,并且 取几个值。

    以下是一个示例表,以防没有太大意义:

    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
      ...
    

    属性1 101号船从不变化,而且 201号船从不变化。我想找到两种属性都可以改变的飞船。

    我写了下面的代码,它运行正常,但我不确定它是否按我的意愿运行。分组+区分让我头晕目眩。。。

    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;
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Yogesh Sharma    7 年前

    如果我理解正确,你可以用 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
                 );