При такой стандартной настройке авторов / книг:
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" - это неопределенное имя.SQLSTATE = 42704
Похоже, DB2 теряет отслеживание самой внешней таблицы после того, как в подзапрос попадает на 3 уровня?
ПРИМЕЧАНИЕ. Это просто сфабрикованный запрос, поэтому он не можетмного смысла (и может быть легко переписан, чтобы иметь только 2 уровня вложенности, который отлично работает).Я просто хочу подтвердить, действительно ли у DB2 такой явный недостаток.