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

如何根据多行字段选择数据

  •  0
  • Yichz  · 技术社区  · 16 年前

    我有这样一张桌子:

    +------------------------+
    |Key| value | name       |   
    +---+-------+------------+      
      1     A       john    
      2     B       Mary    
      3     C       Ben    
      4     A       Ben    
      5     B       john    
      6     C       Mary
    

    如何选择返回值为“a”和“b”的人(在本例中,仅限“john”)。

    我现在有一个丑陋的SQL……

    SELECT * FROM table where value="A" or value="B" group by name having count(name) >1 ;
    

    有人能告诉我一个更优雅的方式吗?

    2 回复  |  直到 16 年前
        1
  •  2
  •   codaddict    16 年前

    这个怎么样?

    select distinct t1.name from tab t1, tab t2 
    where t1.name = t2.name and 
    t1.value='A' and t2.value='B';
    
        2
  •  1
  •   Bell    16 年前

    你的回答一点也不乱。但是,您不能为键选择有意义的值,也不能知道您在键中要查找的值。所以可以写得更整齐一点

    
    SELECT name
     FROM table
     WHERE key IN ('A', 'B')
     GROUP BY name
     HAVING COUNT(*) = 2
    
    

    它可以很容易地缩放到任意数量的值,甚至Y键的X。