Да, Oracle поддерживает псевдонимы таблиц. Он поддерживает AS
в списке SELECT
, но не в списке FROM
:
SELECT a.col - b.col AS markup
FROM RETAIL a,
COST b
WHERE b.id = a.id
Большинство баз данных поддерживают пропуск ключевого слова AS
.
При этом псевдонимы таблиц не являются псевдонимами столбцов - вам все равно нужно сослаться на определенный столбец в соответствующей таблице в предложении SELECT, как вы видите в моем обновлении вашего примера. Я также добавил критерии WHERE
, чтобы запрос не возвращал декартово произведение.
Псевдонимы таблиц иногда требуются для производных таблиц / встроенных представлений (подзапрос AKA, хотя я нахожу терминологию очень расплывчатой):
SELECT x.col
FROM (SELECT t.col,
MAX(t.date)
FROM TABLE t
GROUP BY t.col) x
Вот ваш запрос:
Ваша проблема заключалась в том, что вы помещали псевдоним таблицы в производную таблицу, когда она должна находиться за скобками / круглыми скобками:
SELECT DISTINCT TO_CHAR(MONTHS_BETWEEN(x.pubdate, y.pubdate), '99.99') AS "Answer"
FROM (SELECT DISTINCT a.pubdate FROM BOOKS3 a WHERE a.pubid = 2) x,
(SELECT DISTINCT b.pubdate FROM BOOKS3 b WHERE b.pubid = 4) y
Причина, по которой вам нужно отличное, - это декартово произведение.