各部品の最低価格のサプライヤを探す必要があります。SQLクエリ各部品の最低価格のサプライヤを見つける
テーブル:取引先(SID、SNAME、アドレス)、部品(PID、PNAME、色)、カタログ(SID、PID、コスト)
これは動作します:
SELECT
sname, pid
FROM
(SELECT
*
FROM
suppliers
NATURAL JOIN catalog
NATURAL JOIN (SELECT
pid, MIN(cost) AS min_cost
FROM
catalog
GROUP BY (pid)) AS m
HAVING cost = min_cost) AS n
しかし、私はしてみてください以下にそれを短縮するために、私は、having句内の未知のコストがあるというエラーが表示されます。
SELECT
sname, pid
FROM
suppliers
NATURAL JOIN
catalog
NATURAL JOIN
(SELECT
pid, MIN(cost) AS min_cost
FROM
catalog
GROUP BY (pid)) AS m
HAVING cost = min_cost
は、なぜそれがコストを見つけることができませんか?サブクエリをカタログに追加したので、テーブルのコストはかかりませんか?
EDITは、私が提案どおりINNER JOIN
の代わりNATURAL JOIN
を使用するように変更しましたが、私はまだ同じエラーを取得しています。新しいクエリ:
SELECT
s.sname, m.pid
FROM
suppliers s
INNER JOIN
catalog c ON s.sid = c.sid
INNER JOIN
(SELECT
pid, MIN(cost) AS min_cost
FROM
catalog
GROUP BY (pid)) AS m ON c.pid = m.pid
HAVING cost = min_cost
EDIT_2
問題がbbrummの回答で示したように、実際に、WHERE
であるべきで、JOIN
しかしHAVING
ませんでした。私はあなたのカラム名にいくつかの仮定を行った
SELECT
supplier.sname,
catalog.pid
FROM suppliers
INNER JOIN catalog ON suppliers.supplier_id = catalog.supplier_id
INNER JOIN
(SELECT
pid, MIN(cost) AS min_cost
FROM catalog
GROUP BY (pid)) AS m
ON catalog.pid = m.pid
WHERE catalog.cost = m.min_cost;
(例えばSUPPLIER_ID)を変更する必要があります。
「NATURAL JOIN」を忘れてしまった。これは起こるのを待っているバグです(実際には、この場合のように起こっています)。 'ON'または' USING'節を使用してください。 –
@GordonLinoffは、私がそれから何の答えでも見なかった理由を説明します。そしてなぜ私はAccessデータベースを使っているときに私のVBAコースで常に「ON」を使用したのですか?しかし、今は初心者のRDBMSコースと私たちの教授です。可能であればいつでも 'NATURAL JOIN'を使用するように私たちに言っています...未来のことを知っておくと良いです –
Profのように聞こえます。それは質問に答えることを望まない。 – Hogan