MySQL union 缺少括号

MySQL union missing parenthesis

我不明白。我尝试用 union 总结两个相同的表,但它不起作用。

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 应该是错误的,因为我的 workbench 想要在 T2 前面加一个括号。但如果我这样做是错误的两个。我是否必须在我的 workbench 上设置一些东西?

只需执行:

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;

在MySQL中,如果要对不同数据集中的相同值进行求和,需要使用关键字ALL,因为union单独将数据集求和到一个唯一的数据集中并应用一个 DISTINCT 就可以了。 您的查询应如下所示:

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

你肯定可以使用 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
     ) 

您的查询有误。您尝试合并两个在顶部引用第一个子查询的 SELECT 语句的子查询。

您正在寻找的代码:

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

这将 return 两个表中的非重复值。

如果您想将其用作子查询,您可以简单地用另一个 SELECT 语句将其包围起来,如下例所示:

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

在这种情况下,如果需要,您可以在顶部 SELECT 语句中进行额外计算。