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
语句中进行额外计算。
我不明白。我尝试用 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
语句中进行额外计算。