2015-01-13 74 views
1

我有一個表,並想用它作爲我輸入一個查詢從另一臺拉:拿一個表作爲輸入和輸出使用另一個表的BigQuery

輸入表:

+----------+--------+ 
    | item | period | 
    +----------+--------+ 
    | HD.4TB |  6 | 
    | 12333445 |  7 | 
    | 12344433 |  5 | 
    +----------+--------+ 

我「使用這個查詢使用輸入M:

SELECT 
snapshot, 
item_name, 
commodity_code, 
planning_category, 
type, 
SUM(quantity) qty, 
sdm_month_start_date, 
FROM planning_extract 
WHERE 
planning_category IN (SELECT item FROM input) 
GROUP BY snapshot, 
item_name, 
commodity_code, 
planning_category, 
type, 
sdm_month_start_date 

的問題是輸入表,如果它是字符串,那麼它應該是planning_category;如果它是數字,那麼它是item_name。我在想什麼東西能讓意義是改變「其中」條款上面:

WHERE (planning_category or item_name) IN (SELECT item FROM input) 

但是這給了我錯誤說「表達的半連接(即‘X IN(SELECT ...)’)必須成爲其中的一部分邏輯與「。

那麼有沒有辦法做到這一點?

謝謝。

+1

'WHERE( planning_category IN(SELECT item FROM input)或item_name IN(SELECT item FROM input))'? – Turophile

回答

0

這個問題似乎是一個SQL問題,而不是一個大問題。作爲Turophile在他的評論中指出,正確的語法應爲

WHERE (planning_category IN (SELECT item FROM input) OR item_name IN (SELECT item FROM input)) 
0

我相信谷歌沒有讓我們使用INOR S,只有在AND秒。這真的很糟糕,我也面臨同樣的問題。

解決方案

WHERE (planning_category IN (SELECT item FROM input) OR item_name IN (SELECT item FROM input)) 

解決這個問題,你會得到同樣的錯誤Semijoin expression (i.e. "x IN (SELECT ...)") must be a part of logical AND.

+1

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 – DavidPostill

+0

@DavidPostill我有一個答案,只是把它放在警告之後。現在我先回答問題 – Kostis

1

這些都是等價的:

1.

SELECT word, corpus FROM [publicdata:samples.shakespeare] 
WHERE (word OR corpus) IN (SELECT x FROM (SELECT 'hamlet' x), (SELECT 'about' x)) 

2.

SELECT word, corpus FROM [publicdata:samples.shakespeare] 
WHERE word IN (SELECT x FROM (SELECT 'hamlet' x), (SELECT 'about' x)) 
OR corpus IN (SELECT x FROM (SELECT 'hamlet' x), (SELECT 'about' x)) 

3.

SELECT word, corpus 
FROM (
    SELECT word, corpus FROM [publicdata:samples.shakespeare] 
    WHERE word IN (SELECT x FROM (SELECT 'hamlet' x), (SELECT 'about' x)) 
), (
    SELECT word, corpus FROM [publicdata:samples.shakespeare] 
    WHERE corpus IN (SELECT x FROM (SELECT 'hamlet' x), (SELECT 'about' x)) 
) 

BigQuery中的第三一個工作 - 但可能會產生一些重複。

爲了防止重複(1排在這種情況下):

SELECT word, corpus 
FROM (
    SELECT word, corpus FROM [publicdata:samples.shakespeare] 
    WHERE word IN (SELECT x FROM (SELECT 'hamlet' x), (SELECT 'about' x)) 
), (
    SELECT word, corpus FROM [publicdata:samples.shakespeare] 
    WHERE corpus IN (SELECT x FROM (SELECT 'hamlet' x), (SELECT 'about' x)) 
    AND word NOT IN (SELECT x FROM (SELECT 'hamlet' x), (SELECT 'about' x)) 
) 

(更換(SELECT '約' X與你喜歡的表 '哈姆雷特' X),(SELECT))

相關問題