0

SQL:

WITH joined AS (
    SELECT * 
    FROM table_a a 
    JOIN table_b b ON (a.a_id = b.a_id)
)
SELECT a_id 
FROM joined 

無効な識別子を返します。

WITH句を使用する場合、結合された列をどのように選択できますか? エイリアス、プレフィックスを試しましたが、何も機能しませんでした。私は使用できることを知っています:

WITH joined AS (
    SELECT a.a_id 
    FROM table_a a 
    JOIN table_b b ON (a.a_id = b.a_id)
)
SELECT a_id 
FROM joined

しかし、すべてのフィールドをカバーするには、このエイリアスが必要です。

この条件を満たすことができた唯一の方法は、次を使用することです。

WITH joined AS (
    SELECT a.a_id a_id_alias, a.*, b.* 
    FROM table_a a 
    JOIN table_b b ON (a.a_id = b.a_id) 
)
SELECT a_id_alias 
FROM joined 

しかし、それは完全な解決策ではありません...

4

3 に答える 3

5

USINGテーブルを結合するときに句の効果を使用できます。

結合列が同じ名前を持つテーブルを結合すると (例の場合のように)、USING句は結合列を 1 回だけ返すため、次のように機能します。

with joined as (
  select *
  from table_a a 
    join table_b b using (a_id)
)
select a_id
from joined;

SQLFiddle の例: http://sqlfiddle.com/#!4/e7e099/2

于 2014-07-09T11:36:59.467 に答える
2

エイリアスなしでこれを行うことはできないと思います。「結合された」クエリの結果には、a_id という名前の 2 つのフィールドがあります。最後のクエリで行ったように、一方 (または両方) にエイリアスを設定しない限り、外側のクエリはどの a_id を参照しているかわかりません。

最終的なクエリが「完璧な」ソリューションではないのはなぜですか?

于 2014-07-09T11:27:09.047 に答える