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

如何在MySQL中筛选出具有多个匹配键的记录?

  •  2
  • baudtack  · 技术社区  · 14 年前

    我有两辆宝马,两辆奔驰和一辆起亚。它们在一个MySQL表中,表中有汽车id和品牌,我想知道我只有哪个品牌的汽车。因此,我希望返回的是一个记录,在这个案件与品牌起亚我不希望宝马或奔驰出现在所有。

    编辑

    我把问题过分简化了。很抱歉。所以这才是真正的交易。我和希德和希德有一张桌子。sid是唯一的,但hid不是。我要数一数唯一的藏匿者的数量。要做到这一点,

    select count(distinct hid) from table
    

    要计算完整的记录数,我只查看从

    select * from table
    

    select * from ( 
     select distinct hid from table group by hid
      union
     select hid from table group by hid) group by hid
    

    认为这会返回第二个查询中显示的任何hid,而不是第一个查询中的hid。但事实并非如此,我很纠结于从这里走到哪里。有没有办法接受我的两个查询并得到hids的diff?

    我不是说“从唯一的hids中减去总hids”的区别,而是指由于某种原因没有在唯一的hids中显示的hids的总数。

    2 回复  |  直到 14 年前
        1
  •  7
  •   OMG Ponies    14 年前

    使用:

      SELECT t.hid
        FROM YOUR_TABLE t
    GROUP BY t.hid
      HAVING COUNT(*) > 1
    

      SELECT t.brand
        FROM YOUR_TABLE t
    GROUP BY t.brand
      HAVING COUNT(*) = 1
    
        2
  •  0
  •   user359040 user359040    14 年前

    好像您想要一个查询,它将返回两个记录的总数 数量 hid

    select sum(count_hid) total_count, 
           sum(case count_hid when 1 then 1 else 0 end) singles_count
    from
    (select count(*) count_hid
     from your_table
     group by hid) sq