0

鉴于这两个表:

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

我怎样才能找到所有在0以上Foo.name没有对应的s Bar,value

例如:

Foo
id   name
1    a
2    b
3    c

Bar
fooid    value
1        0
1        1
2        0
3        4

Result:
b
4

4 回答 4

2
SELECT Name
FROM Bar
INNER JOIN Foo ON Foo.Id = Bar.fooId
GROUP BY fooId, name
HAVING SUM(Value) = 0

此查询和 zodeus 发布的查询执行时间大致相同,但是此查询不包括任何未由 Bar 表引用的 Foo 记录。例如,如果您还有记录 Foo (4, d),则此查询仍将返回“b”,而 zodeus 的查询将返回“b”和“d”。

于 2009-03-13T05:26:46.650 回答
1
SELECT name FROM FOO WHERE id NOT IN(
    SELECT fooId FROM Bar GROUP BY fooId HAVING MAX(Value) > 0)
于 2009-03-13T05:18:06.453 回答
1

我发现以下内容最容易阅读和理解......

SELECT foo.name
FROM foo
WHERE NOT EXISTS (SELECT 'x'
                  FROM bar
                  WHERE bar.fooid = foo.id
                    AND bar.value > 0)
于 2009-03-13T06:03:51.260 回答
0
select Foo.name 
from Foo
where Foo.id not in 
(select Bar.fooid from Bar
where value > 0)
于 2009-03-13T07:02:14.707 回答