プロが教える店舗&オフィスのセキュリティ対策術

あるデータベース(Google BigQuery)配下に、店舗ごとのデータを格納した、同じ構成のテーブルが数十件あります。

例)
テーブル名:shop01
----------------------------------
product_type | price | shop_id
----------------------------------
タイプA  | 100 | 1
タイプB | 200 | 1
タイプC | 300 | 1

shop02
----------------------------------
product_type | price | shop_id
----------------------------------
タイプB  | 200 | 2
タイプC | 300 | 2
タイプD | 400 | 2



この場合、例えばこれらすべてのテーブルから、タイプBの価格(price)およびshop_idをすべて取得したい場合、どのようなSQLクエリを書けばいいでしょうか。(「SELECT price, shop_id FROM テーブル名* WHERE...」といった書き方はできず、店舗ごとのデータ同士には関連がないのでJoin句も使わないと思うのですが…)

A 回答 (3件)

UNION ALLを使います。


SELECT price,shop_id FROM shop01
WHERE product_type='タイプB'
UNION ALL
SELECT price,shop_id FROM shop02
WHERE product_type='タイプB'
UNION ALL
SELECT price,shop_id FROM shop03
WHERE product_type='タイプB'
以下、省略
;

簡略化したSQLにもできますが、データ件数が数十万件以上といった場合は、性能上の問題があります。

SELECT price,shop_id FROM
(
SELECT price,shop_id FROM shop01
WHERE product_type='タイプB'
UNION ALL
SELECT price,shop_id FROM shop02
UNION ALL
SELECT price,shop_id FROM shop03
以下、省略
) AS x
WHERE product_type='タイプB'
;
    • good
    • 1
この回答へのお礼

ありがとうございます。やはりこの場合はUNION ALLを使う必要がありそうですね。

お礼日時:2022/05/17 19:08

最初の回答は、編集途中でした。


二つ目の回答を参照してください。
    • good
    • 0

UNION ALLを使います。



SELECT price, shop_id FROM shop01
WHERE product_type='タイプB'
UNION ALL
SELECT price, shop_id FROM shop02
WHERE product_type='タイプB'
UNION ALL
以下、省略
;

もう少し簡略化した書き方もできますが、データ件数が数十万件以上あると性能上、問題になるかも知れません。

SELECT price, shop_id FROM
(
SELECT * FROM shop01
UNION ALL
SELECT * FROM shop02
UNION ALL
以下、省略
) AS x
WHERE product_type='タイプB'
;
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!