2
複数の条件で2つのテーブルを結合する方法はありますか?BigQuery - サブクエリとOR文を使用した複数の条件への結合
私のような複数の潜在的価値に参加しましたところ、私は現在のBigQueryへのPostgresからいくつかのコードを移行してい:
SELECT
*
FROM
(
SELECT
offer_table.offer_id
,customer_table.customer_name
,customer_table.visit_count
,ROW_NUMBER() OVER (PARTITION BY offer_table.offer_id ORDER BY customer_table.visit_count DESC) AS customer_visit_rank
FROM
offer_table
LEFT JOIN customer_table ON
(
offer_table.customer_id = customer_table.customer_id
OR offer_table.email = customer_table.email
OR offer_table.phone = customer_table.phone
)
) dummy
WHERE
customer_visit_rank = 1
私の申し出と顧客のデータは、当社のID、電子メールの一貫性のない使用を持っていたので、私はこれに必要な
、電話欄はすべて有効な可能性があります。複数のフィールドが機能している場合(例:idとemailが一致)、重複する行があり、ORDER BYセクションを使用してランク付けした後、row_numberカラムに基づいてフィルタリングします。私はBigQueryの中に複数の条件に参加しようとすると、
はしかし、私は、このエラーメッセージが表示されます:
LEFT OUTER JOIN cannot be used without a condition that is an equality of fields from both sides of the join.
は誰が代わりに上記を行うための複数の値に参加するための解決策を考え出していますか?
は、次の3つの 'JOINのon'の条件のそれぞれのための3つの別々のクエリを実行し、' UNION' OR 'UNION ALLを使用して結果を組み合わせることができます'? 'UNION ALL'は、見つかった行を追加するだけであり、' UNION'のように重複を削除する必要はありません。 だから基本的に 'SELECT ... ON customer_id ... UNION ALL SELECT ... ON email ... UNION ALL SELECT ... ON phone'です。これが正しければ、私はそれを答えることができますか? – flutter
標準SQLを使用します。 –
@flutterそうすることで、offer_idごとに重複する行がありませんか?私は正しいデータを持っているcustomer_table行に一致するoffer_idごとに一意の行を取得しようとしています(この例では最高のvisit_count)。 –