2017-11-24 24 views
0

Google BigQuery(#standardSQLを使用)では、2つのテーブルの間に結合がある場合、固定プレフィックスを各テーブルのすべてのカラムに適用する必要があります。Google BigQuery:重複した名前を持つ結合テーブルのすべての列のプレフィックス

#standardSQL 
WITH user AS (
    SELECT "john" as name, "smith" as surname, 1 as parent 
    UNION ALL 
    SELECT "maggie" as name, "smith" as surname, 2 as parent 
), 

parent AS (
    SELECT 1 as id, "john" as name, "doe" as surname 
    UNION ALL 
    SELECT 2 as id, "jane" as name, "smith" as surname 
) 

Userテーブル

+-----+--------+---------+--------+ 
| Row | name | surname | parent | 
+-----+--------+---------+--------+ 
| 1 | john | smith |  1 | 
| 2 | maggie | smith |  2 | 
+-----+--------+---------+--------+ 

親テーブル

+-----+----+------+---------+ 
| Row | id | name | surname | 
+-----+----+------+---------+ 
| 1 | 1 | john | doe  | 
| 2 | 2 | jane | smith | 
+-----+----+------+---------+ 

この

SELECT u.*, p.* FROM user u JOIN parent p ON u.parent = p.id 
のようなクエリ:ここ

シナリオですが、私はこのような構造を持っています

テーブルのフィールドに変更される場合は、私が編集するたびに必要になります私はこの

SELECT 
    u.name as user_name, 
    u.surname as user_surname, 
    p.name as parent_name, 
    p.surname as parent_surname 
FROM user u JOIN parent p ON u.parent = p.id 

+-----+-----------+--------------+-------------+----------------+ 
| Row | user_name | user_surname | parent_name | parent_surname | 
+-----+-----------+--------------+-------------+----------------+ 
| 1 | john  | smith  | john  | doe   | 
| 2 | maggie | smith  | jane  | smith   | 
+-----+-----------+--------------+-------------+----------------+ 

のようにテーブルのカスタムエイリアシングを実行しないようにしたい、次のエラー

Error: Duplicate column names in the result are not supported. Found duplicate(s): name, surname 

を生成指定された接頭辞を持つ新しいフィールドを適用するためのステートメント(またはステートメント)したがって、固定列名を使用するこの方法は適切な方法ではありません。

クエリ演算子は、そこに記載されているようにテーブルを取得するために、接頭辞を自動的に適用する方法はありますか?結果に

SELECT u.* AS user_*, p.* AS parent_* 
FROM user u JOIN parent p ON u.parent = p.id 

答えて

0

私がこれまで考えることができる唯一のオプションは

#standardSQL 
WITH user AS (
    SELECT "john" AS name, "smith" AS surname, 1 AS parent UNION ALL 
    SELECT "maggie" AS name, "smith" AS surname, 2 AS parent 
), parent AS (
    SELECT 1 AS id, "john" AS name, "doe" AS surname UNION ALL 
    SELECT 2 AS id, "jane" AS name, "smith" AS surname 
) 
SELECT user, parent 
FROM user 
JOIN parent 
ON user.parent = parent.id 

以下の通りです

Row user.name user.surname user.parent parent.id parent.name parent.surname 
1 john  smith   1   1   john  doe 
2 maggie  smith   2   2   jane  smith 

としてそれはあなたが期待する正確に何ではありませんが、:何かのようにそれぞれの行を対応する結合テーブルからそれぞれのSTRUCTにラップするときに最も近いものです。たとえば、

{ 
"user": {"name": "john", "surname": "smith","parent": "1"}, 
"parent": {"id": "1","name": "john","surname": "doe"} 
} 
+0

ありがとうございますが、わかりましたが、理解しても残念ながら実行できないように、 –

+0

のようにSTRUCTを使用する代わりにカスタムプレフィックスを使用する必要があります。私が言及したように - これは私が考えることができる最も近いものです。 :o) –

関連する問題