2010-05-03 12 views
2

查询查找“以相同价格销售三种不同啤酒的所有酒吧?”查询查找以相同价格销售三种不同啤酒的所有酒吧

我的表是

塞尔斯(酒吧,啤酒价格) - 巴 - 外键.. 酒吧(名称,地址) - 命名的主键。

我想到了这样的事情但dosent似乎工作...

Select A.bar As bar , B.bar as bar 
From Sells AS A, Sells AS B 
Where A.bar = B.bar and A.beer <> B.beer 
Group By(A.beer) 
Having Count(Distinct A.beer) >= 2 

这是正确的SQL查询?

+0

那么有一个主题会吸引人们! :) – 2010-05-03 18:58:54

回答

2

我会做这种方式:

Select A.bar 
From Sells AS A 
JOIN Sells AS B ON (A.bar = B.bar AND A.price = B.price 
    AND A.beer <> B.beer) 
JOIN Sells AS C ON (A.bar = C.bar AND A.price = C.price 
    AND A.beer <> C.beer AND B.beer <> C.beer) 

在MySQL尤其是加入的解决方案是可能比GROUP BY更有效。

1
Select ... 
From Bars As B 
Where Exists (
       Select 1 
       From Sells As S1 
       Where Exists (
           Select 1 
           From Sells As S2 
           Where S2.bar = S1.bar 
            And S2.beer <> S1.beer 
            And S2.price = S1.price 
           ) 
        And S1.Bar = B.name 
       Having Count(*) = 3  
       )