Это логично: ваш подзапрос создает одну таблицу t
, а после слов вы пытаетесь сослаться на таблицу ALBUM
.Нет ALBUM
, есть только t
Самое быстрое решение - переместить предложение WHERE
для JOIN, в которое оно входит: в подзапрос.
SELECT t.* FROM (
SELECT
TITLE.name, ALBUM.year, GENRE.Type
(TITLE.value-TITLE.msp) AS Lower,
(TITLE.value+TITLE.msp) AS Upper,
(TITLE.value) AS Value
FROM TITLE, ALBUM, GENRE
WHERE ALBUM.ID=GENRE.ID AND TITLE.ID=ALBUM.ID
) t
WHERE 98 BETWEEN t.Lower AND t.Upper
ORDER BY ABS(98 - t.Value) ASC;
Сам запрос не такой красивый, хотя ... почему бы не попробовать это вместо этого:
SELECT
TITLE.name, ALBUM.year, GENRE.Type
(TITLE.value-TITLE.msp) AS Lower,
(TITLE.value+TITLE.msp) AS Upper,
(TITLE.value) AS Value
FROM TITLE
JOIN ALBUM
ON TITLE.ID=ALBUM.ID
JOIN GENRE
ON ALBUM.ID=GENRE.ID
WHERE 98 BETWEEN Lower AND Upper
ORDER BY ABS(98 - Value) ASC;
- Удален ненужный подзапрос
- Используется JOIN в стиле SQL-92 вместо SQL-JOIN в стиле 89 (декартово произведение с предложением where)