【发布时间】:2019-11-09 10:07:50
【问题描述】:
我正在 MySQL 中执行 UNION,但有一段时间无法排除故障。 错误说
t1.*周围的语法不正确
这 2 个 SELECT 单独工作正常,检查。但是 UNION 失败了。我不习惯 MySQL 语法,也许有问题。
SELECT (
t1.*,
a.region_count
FROM
(
SELECT
data_region,
COUNT(*) AS region_count
FROM
t2
GROUP BY
data_region
) AS a
LEFT OUTER JOIN
t1
ON
t1.values_att0 = a.data_region
WHERE
t1.name_0 = 'region'
) AS b
UNION
SELECT (
t1.*,
c.age_gen_count
FROM
(
SELECT
data_dage,
data_gen,
COUNT(*) AS age_gen_count
FROM
t2
GROUP BY
data_dage,
data_gen
) AS c
LEFT JOIN
t1
ON
t1.values_att0 = c.data_dage AND
t1.id_question_1 = c.data_gen
WHERE
t1.name_0 = 'age' AND
t1.q_name_1 = 'gen'
)
【问题讨论】:
-
UNION [ALL|DISTINCT]将两个查询粘合在一起。这意味着将行放在一起。为此,列必须匹配。但是,在您的查询中,粘合的第一个查询返回两列,后三列。这行不通。请显示示例数据和预期结果,以便我们看到您想要的结果。 -
@ThorstenKettner 如果我想将它们合并在一起,我应该使用什么? NULL 将出现在没有数据的地方,但没关系。
-
@ThorstenKettner 顺便说一句,我有相同数量的列,因为在第二个 SELECT 中显示了属性组合的计数,而不是每个属性的组合。
-
对不起,是的,我看错了。然后 zessx 的查询应该适合你。 (但您希望
UNION ALL和内部联接或 where 子句移至 on 子句以使外部联接起作用)。 -
@ThorstenKettner 正是我使用 UNION ALL 并删除了一些其他错误时发生的事情 :) 。还是谢谢你!