0

次の 2 つのテーブルがあるとします。

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 に答える