문제

이 두 테이블이 주어지면 :

Foo (id, name)       -- PK = id
Bar (fooId, value)   -- PK = composite, fooId + value
                     -- value is a non-negative int

모든 것을 어떻게 찾을 수 있습니까? Foo.nameS가없는 곳 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)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top