2017-01-26 101 views
1

我沒有明白。我嘗試用union來總結兩個相同的表,但它不起作用。MySQL聯盟缺少括號

t_fb_data: 

id | date  | sum 
--------------------- 
1 | 2017.01.01| 2 
2 | 2017.01.02| 1 

t_google_data: 

id | date  | sum 
--------------------- 
1 | 2017.01.01| 7 
2 | 2017.01.02| 1 
3 | 2017.01.03| 2 

result could looks like: 

| date  | sum 
------------------ 
| 2017.01.01| 2 
| 2017.01.02| 1 
| 2017.01.01| 7 
| 2017.01.02| 1 
| 2017.01.03| 2 

這是我的查詢:

SELECT * 
    FROM 
    (SELECT date 
      , sum 
     FROM t_fb_data 
    ) T1 
Union 
    (SELECT date 
      , sum 
     FROM t_google_data 
    ) T2 

T2應該是錯誤的,因爲我的工作臺上想在T2前面的括號。但是,如果我這樣做是錯誤的兩個。我必須在我的工作臺上設置一些東西嗎?

回答

1

您的查詢是錯誤的。您嘗試將頂部有SELECT聲明的兩個子查詢合併爲第一個子查詢。您正在尋找

代碼:

SELECT date, sum FROM t_fb_data 
UNION 
SELECT date, sum FROM t_google_data 

,將返回非兩個表中的重複值。

如果你想用這個作爲一個子查詢,你可以簡單地圍繞與另一個SELECT語句上下面的例子:

SELECT sub.* 
FROM (
SELECT date, sum FROM t_fb_data 
UNION 
SELECT date, sum FROM t_google_data 
) sub 

在這種情況下,您可以在頂部SELECT語句來完成產生額外的計算,如果需要的話。

+0

OMG非常感謝你。有用。 – nicoschuck

1

簡單地做:

SELECT 
    date, sum 
FROM 
    t_fb_data 
UNION SELECT 
    date, sum 
FROM 
    t_google_data 

或把它放在一個子查詢:

SELECT 
    * 
FROM 
    (SELECT 
     date, sum 
    FROM 
     t_fb_data UNION SELECT 
     date, sum 
    FROM 
     t_google_data) t; 
+0

第一個作品。但如果我想添加一些where子句,我必須在每個子查詢上執行它。第二個需要在每個選擇 – nicoschuck

+0

@nicoschuck對不起。現在更新。 – GurV

+0

是的,現在它也可以工作,謝謝你:) – nicoschuck

0

在MySQL中,如果你想從不同的數據集綜上所述相同的值,就需要使用關鍵字ALL,因爲只有工會會將數據集合在一個唯一的數據集中並對其應用DISTINCT。 您的查詢應該是這樣的:

SELECT date,sum FROM t_fb_data Union ALL SELECT date,sum FROM t_google_data 
+0

其實它也可以與工會合作。問題是如果我想添加一些WHere子句,或者如果我想分組數據,我必須將它寫在每個字符串上。 – nicoschuck

+0

因此,您必須將其他列放在您的兩個查詢中,以使其在內聯視圖外可見。 – Mhalgan

0

您可以使用UNION ALL肯定的, 但如果你想堅持到UNION才嘗試這個,

SELECT * 
    FROM 
    (SELECT date 
      , sum, 'fb' identifier 
     FROM t_fb_data 
    ) T1 
Union 
    (SELECT date 
      , sum, 'google' identifier 
     FROM t_google_data 
    ) T2 

這是因爲,你的數據從兩個查詢將給出相同的記錄,這些記錄將被合併到單個記錄中,所以如果你將寫入標識符,兩個表都將有不同的記錄。

我希望這會有所幫助。

編輯

(SELECT date 
      , sum, 'fb' identifier 
     FROM t_fb_data 
    ) 
Union 
    (SELECT date 
      , sum, 'google' identifier 
     FROM t_google_data 
    ) 
+0

我得到這個錯誤:17:12:49 \t T2 \t錯誤代碼:1064。你的SQL語法有錯誤;檢查對應於你的MySQL服務器版本的手冊,在第11行的'T2'附近使用正確的語法。 – nicoschuck

+0

檢查我的編輯部分 – rahulsm