ユーザーが行った操作に基づいてBigQuery構造を構築する動的UIクエリビルダがあります。クエリは(言葉で)のようなものです:製品に製品を見た BigQueryでのネストされたSELECT句とのAND結合とOR結合の組み合わせ
- ユーザー 製品を見たORカートにそれらを追加し、注文した
- ユーザー
このような種類のクエリをサポートするために、最初にネストされたSELECT句を使用しました。たとえば、上記の2番目のクエリは、SQLで次のようになります。
SELECT email FROM users JOIN actions ON users.email = actions.user_id
WHERE email IN (SELECT email FROM users JOIN actions
ON users.email = actions.user_id
WHERE action = 'view_product')
AND action = 'add_product_to_cart'
これまでのところうまくいきます。今、このエラー(Semijoin expression must be a part of logical AND)のため、クエリ「商品を表示したユーザーまたはカートに追加したユーザー」は機能しません。作るOR条件が動作するために、我々は、このようになりますUNIONs.Theクエリのパスを取って喜んでいる:
SELECT email FROM
(SELECT email FROM users JOIN actions
ON users.email = actions.user_id
WHERE action = 'view_product'),
(SELECT email FROM users JOIN actions
ON users.email = actions.user_id
WHERE action = 'add_product_to_cart')
の質問は、どのように両方の組み合わせをサポートしてANDとOR接続詞していますか? BigQueryのUNIONはWHERE節では動作しないため、ネストされたサブクエリをどのように組み合わせますか? 具体的には、上記の3番目の箇条書きのクエリを作成するにはどうすればよいですか?
これは、従来のSQLではすでに可能です。クエリ#2は本質的に同じものです。 UNIONは本質的にORを意味します。しかし、問題は、ネストされたサブクエリに対してANDとORを組み合わせることです。たとえば、商品を見たか、カートに追加して注文しました。 – Milind
この編集が役立つかどうかを確認してください。私はこの問題が最初は従来のSQLの制限だと思った。 –