有了這個標準的作者/書籍安裝後會失去跟蹤表:DB2獲得3個層次進深一子查詢
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
看起來像DB2在進入子查詢3層後失去了最外層表的蹤跡嗎?
注意:這只是一個捏造的查詢,所以它可能沒有多大意義(並且可以很容易地被重寫爲只有2級嵌套,它工作正常)。我只想確認DB2是否確實存在如此明顯的缺點。
+1海報上有他的作用域混合起來。子選擇是獨立的語句,其結果暴露給外部選擇而不是其他方式。 – Eddy
@Eddy謝謝你比我更明確地指出了這一點。 – Ingo
這沒有意義。爲什麼第二個最內層的authors.id會工作呢?順便說一句,在PostgreSQL和SQL Server中,查詢工作得很好。 – sayap