【问题标题】:SQL Key value table--select ids that have multiple keysSQL键值表--选择具有多个键的id
【发布时间】:2016-01-14 19:44:46
【问题描述】:

我需要获取键值表中的记录,结构如下:

CREATE TABLE `PROPERTY` (
  `id` int(11) NOT NULL,
  `key` varchar(64) NOT NULL,
  `value` text NOT NULL,
  PRIMARY KEY (`id`,`key`)
);

我需要获取所有具有多个特定键值条目的 ID。例如,所有具有键“foo”、“bar”和“foobar”的 id。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    只需使用GROUP BY进行分组,然后检查组数即可计算多个值:

    Select 
        id
    from 
        `PROPERTY`
    group by 
        key, value
    having 
        count(*) > 1
    

    【讨论】:

    • 不确定您是否需要/需要 group by 此处的值。 OP的?可以有多种解释方式。
    • 对不起,我的问题不够具体。我真正需要的是具有几个特定键的 ID。
    • 特定的keys 还是只是所有重复的键?
    • @lmerry213 所以一个键可以是color,它可以有values蓝色和红色。 (2) 为 1 个 id 赋值相同的键......在这种情况下,从 group by 中消除值,你应该得到想要的结果?
    【解决方案2】:

    鉴于更新的问题...

    由于您知道特定的键,因此您也知道有多少...

    SELECT id
    FROM `PROPERTY`
    Where key in ('foo','bar','foobar')
    GROUP BY ID
    having count(distinct key) = 3
    

    【讨论】:

      【解决方案3】:

      如果您需要所有行的 id 键值计数(= >1)

       select id from  `PROPERTY`
       where (key, value) in (select key, value from `PROPERTY`group by 
      key, value
       having 
      count(*) > 1)
      

      【讨论】:

        猜你喜欢
        • 2019-11-09
        • 2010-12-01
        • 1970-01-01
        • 2014-06-12
        • 1970-01-01
        • 2016-05-23
        • 2012-03-05
        • 2017-10-03
        • 1970-01-01
        相关资源
        最近更新 更多