に3つのレベルを取得した後、テーブルのトラックを失う:DB2は、この規格作者/ブックのセットアップで深いサブクエリ
CREATE TABLE authors (
id int NOT NULL,
name varchar(255) NOT NULL
)
CREATE TABLE books (
id int NOT NULL,
name varchar(255) NOT NULL,
author_id int NOT NULL,
sold int NOT NULL
)
INSERT INTO authors VALUES (1, 'author 1')
INSERT INTO authors VALUES (2, 'author 2')
INSERT INTO books VALUES (1, 'book 1', 1, 10)
INSERT INTO books VALUES (2, 'book 2', 1, 5)
INSERT INTO books VALUES (3, 'book 3', 2, 7)
このクエリは何とか動作しません:
SELECT
(
SELECT
count(*)
FROM
(
SELECT
books.name
FROM
books
WHERE
books.author_id = authors.id
AND books.sold > (
SELECT
avg(sold)
FROM
books
WHERE
books.author_id <> authors.id
)
) AS t
) AS good_selling_books
FROM
authors
WHERE
authors.id = 1
エラーメッセージがあります:
SQL0204N "AUTHORS.ID" is an undefined name. SQLSTATE=42704
サブクエリに3レベルの深さを与えた後にDB2が最も外側のテーブルのトラックを失うようですか?
注:これは単なる作成されたクエリなので、あまり意味がないかもしれません(そして、うまく動作する2つのレベルのネストしか持たないように簡単に書き換えられます)。私はちょうどDB2が本当にそのような目立つ欠点を持っているかどうかを確認したい。
+1ポスターは彼のスコープが混ざっています。 Subselectはスタンドアロンのステートメントで、その結果は外側の選択にさらされます。 – Eddy
@Eddyこれを私よりも明示的に指摘してくれてありがとう。 – Ingo
これは意味をなさない。なぜ2番目の最も内側のauthors.idはそれで動作しますか?ちなみに、クエリはPostgreSQLとSQL Serverで完全に正常に動作します。 – sayap