문제
이 두 테이블이 주어지면 :
Foo (id, name) -- PK = id
Bar (fooId, value) -- PK = composite, fooId + value
-- value is a non-negative int
모든 것을 어떻게 찾을 수 있습니까? Foo.name
S가없는 곳 Bar,value
0 이상?
예 :
Foo
id name
1 a
2 b
3 c
Bar
fooid value
1 0
1 1
2 0
3 4
Result:
b
해결책
읽고 이해하기 가장 쉬운 다음과 같은 것을 알았습니다 ...
SELECT foo.name
FROM foo
WHERE NOT EXISTS (SELECT 'x'
FROM bar
WHERE bar.fooid = foo.id
AND bar.value > 0)
다른 팁
SELECT Name
FROM Bar
INNER JOIN Foo ON Foo.Id = Bar.fooId
GROUP BY fooId, name
HAVING SUM(Value) = 0
이 쿼리와 Zodeus가 게시 한 쿼리는 실행하는 데 거의 같은 시간이 걸리지 만 바 테이블에서 참조되지 않은 Foo 레코드는 포함되지 않습니다. 예를 들어 FOO (4, D) 레코드가 있으면이 쿼리는 여전히 'b'를 반환합니다.
SELECT name FROM FOO WHERE id NOT IN(
SELECT fooId FROM Bar GROUP BY fooId HAVING MAX(Value) > 0)
select Foo.name
from Foo
where Foo.id not in
(select Bar.fooid from Bar
where value > 0)
제휴하지 않습니다 StackOverflow