from句にエイリアスを割り当てることはできますか?お気に入り:
select a - b "Markup" from retail a, cost b;
編集:申し訳ありませんが、私はそれを少し速すぎて入力し、それが意味をなさないところまで質問を単純化しようとしました
私が実際にやろうとしているのは、エイリアスを使用して、同じテーブル内の2つの公開日の間の月を比較することです。これが私がうまくいくと思ったものです:
select distinct to_char(months_between((select distinct pubdate
from books3
where pubid = 2),
(select distinct pubdate
from books3
where pubid = 4)), '99.99') "Answer"
from books3
私はそれをこのように見せたかった:
select distinct months_between(a,b)
from (select distinct pubdate
from books3
where pubid = 2 as a),
(select distinct pubdate
from books3
where pubid = 4 as b)
しかし、それは機能していません
はい、Oracleはテーブルエイリアスをサポートしています。 AS
リストではSELECT
をサポートしますが、FROM
リストではサポートしません。
SELECT a.col - b.col AS markup
FROM RETAIL a,
COST b
WHERE b.id = a.id
ほとんどのデータベースは、AS
キーワードの省略をサポートしています。
とはいえ、テーブルエイリアスは列エイリアスではありません。例の更新で見られるように、SELECT句でそれぞれのテーブルの特定の列を参照する必要があります。また、クエリがデカルト積を返さないように、WHERE
基準を追加しました。
派生テーブル/インラインビューにはテーブルエイリアスが必要になる場合があります(用語は非常にあいまいですが、別名サブクエリ)。
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
明確なものが必要な理由は、デカルト積のためです。
あなたが持っているものに最も近いのは、サブクエリからAS alias
を移動することです
select distinct months_between(a.pubdate,b.pubdate)
from (select distinct pubdate
from books3
where pubid = 2) as a ,
(select distinct pubdate
from books3
where pubid = 4) as b;
しかし、それでも、クエリはあまり意味がありません。 pubid=2
に2つのレコードがあり、pubid=4
に3つのレコードがある場合、出力に6行が含まれます。
months_between(a1, b1)
months_between(a2, b1)
months_between(a1, b2)
months_between(a2, b2)
months_between(a1, b3)
months_between(a2, b3)
実際にいくつかのグループ化が行われていると思われるので、これにより、bookidごとのレベルでpubid = 2とpubid = 4のエントリが比較されます。
select
bookid,
to_char(months_between(
max(case when pubid=2 then pubdate end),
max(case when pubid=4 then pubdate end)), '99.99') "Answer"
from books
group by bookid;