2017-01-26 69 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