2010-05-03 2 views
2

"같은 가격으로 세 가지 맥주를 판매하는 모든 바가 있습니까?" 바 - - 외래 키 .. 바 (이름, ADDR) - 기본 키의 이름을동일한 가격으로 세 가지 맥주를 판매하는 모든 바를 찾으십시오.

내 테이블

판매 (바, 맥주, 가격)입니다.

나는 ...

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 쿼리가 제대로 작동 dosent 그 그러나이 같은 생각?

+0

사람들을 끌어들일만한 주제가 있습니다. :) –

답변

2

내가 그것을 이런 식으로 할 것 : 특히 MySQL의에서

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) 

을 조인 솔루션은 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  
       ) 
관련 문제