2

私はpyodbcとpostgresを使用しています。

複数の列にエイリアスを付けることはできますか?

これが私の問題の説明です:

データ構造:

data
id | c1  | c2
-------------
1  | 11  | 12
2  | 21  | 22

表記:cは列用です

dictionary
id | key | value
----------------
1  | k1  | v11
1  | k2  | v12
2  | k1  | v21
2  | k2  | v22

表記:kはキー、vは値

k1とk2はさらに2つの列と考えることができます。データ構造は常に変化しているため、このようになっています。私はそれを設計しませんでした、私はそれと一緒に行かなければなりません。

次のようなSQLクエリを理解できません(最も重要なのは、一部の行で、k1列とk2列に名前でアクセスできることです)。

data
id | c1  | c2  | k1  | k2
-------------------------
1  | 11  | 12  | v11 | v12
2  | 21  | 22  | v21 | v22

私が遭遇し続ける問題は、テーブルにエイリアスを付けると、SQL結果にディクショナリテーブルの2つの「キー」列が含まれることです。つまり、2つの列のどちらにアクセスするかを制御できませんが、行にエイリアスを付けると、次に、SQLステートメント内で参照されているテーブルを制御できません。

私が考えている修正は、2つの列のエイリアスを作成することです。

SELECT * FROM data
FULL JOIN dictionary AS a1,a2,a3
ON data.id = a1
FULL JOIN dictionary AS a4,a5,a6
ON data.id = a4
WHERE a2 = k1 and a5 = k2

表記:aはエイリアス用です

この結果は理論的には次のようになります

data
id | c1  | c2  | a3  | a6 
------------------------- 
1  | 11  | 12  | v11 | v12
2  | 21  | 22  | v21 | v22

すべてのaは技術的にはここにありますが、私が興味を持っているのは3と6です。

4

1 に答える 1

2

たとえば、テーブル全体にエイリアスを付けることができますdictionary as d1。次に、そのテーブルの列名をとして参照しますd1.col1。例えば:

SELECT  d.id
,       d.c1
,       d.c2
,       d1.value as a3
,       d2.value as a6
FROM    data as d
LEFT JOIN
        dictionary as d1
ON      data.id = d1.id
        and d1.key = 'k1'
LEFT JOIN
        dictionary as d2
ON      data.id = d2.id
        and d2.key = 'k2'
于 2012-06-28T23:49:24.650 に答える