2016-03-22 13 views
1

Tablo 1BigQuery'yi katılmak coalesce

+---------+-----------+--------+ 
| user_id | email  | action | 
+---------+-----------+--------+ 
| 1  | [email protected] | open | 
+---------+-----------+--------+ 
| 2  | null  | click | 
+---------+-----------+--------+ 
| 3  | [email protected] | click | 
+---------+-----------+--------+ 
| 4  | [email protected] | open | 
+---------+-----------+--------+ 

Tablo 2

ben dayalı katılmak istiyorum
+---------+-----------+--------+ 
| user_id | email  | event | 
+---------+-----------+--------+ 
| 1  | [email protected] | sent | 
+---------+-----------+--------+ 
| null | [email protected] | none | 
+---------+-----------+--------+ 
| 2  | [email protected] | sent | 
+---------+-----------+--------+ 
| 4  | [email protected] | sent | 
+---------+-----------+--------+ 

t1.user_id = t2.user_id ama boş için varken COALESCE oN)
1. (t1.user_id, t1.email) = COALESCE (t2.user_id t2: anahtar, ben BigQuery'deki artır için birden fazla yol çalıştı

t2.email = t1.email birleştirmektir. e-posta)AÇIK durumda 2.) t2.user_id

Ne iş sonu

t2.email = sonra t1.user_id = t2.user_id başka t1.email boş değilken. Bu nasıl yapılabilir?

+0

SQL katılmak için e-posta ile katılmak "DISTINCT IS "ve" DISTINCT DEĞİL "ama BigQuery'de bunu göremiyorum. –

cevap

1

Böyle ayrı iki katılmak bölmek olacaktır:
İlk - user_id katılabilir

SELECT * 
FROM table1 AS t1 
JOIN table2 AS t2 
ON t1.user_id = t2.user_id 

İkinci - cevapsız o kimlikleri ilk sahiptir

SELECT * 
FROM (
    SELECT * FROM table1 
    WHERE user_id NOT IN (
    SELECT t1.user_id 
    FROM table1 AS t1 
    JOIN table2 AS t2 
    ON t1.user_id = t2.user_id 
) 
) t1 
JOIN (
    SELECT * FROM table2 
    WHERE user_id NOT IN (
    SELECT t1.user_id 
    FROM table1 AS t1 
    JOIN table2 AS t2 
    ON t1.user_id = t2.user_id 
) 
) t2 
ON t1.email = t2.email 
+0

Teşekkürler. Gerçekten COALESCE kullanmasını umuyordum. Bağlantıya bağlı olarak mümkün görünüyor. Ama, BigQuery tarafından desteklenmiyor sanırım? http://stackoverflow.com/questions/5304184/proper-way-to-refer-to-coalesced-value-in-select-statement – Blake

+0

ancak şu şekilde değildir: o ( –

+0

https://cloud.google.com/bigquery/query-reference # query-dilbilgisi: join_predicate: field_from_one_side_of_the_join = field_from_the_other_side_of_the_join [AND ...] –

İlgili konular