【问题标题】:MySQL problem joining 2 tables with UNION使用 UNION 连接 2 个表的 MySQL 问题
【发布时间】: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 并删除了一些其他错误时发生的事情 :) 。还是谢谢你!

标签: mysql sql join union


【解决方案1】:

您在 SELECT 字段周围使用括号,这是您的语法错误来源(UNION 不是原因)。只需删除它们:

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'

UNION ALL

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'

【讨论】:

  • 所以我应该删除所有括号还是只删除外部括号?
  • 只是外部的,我正在编辑以显示整个查询。
  • 我按照您的建议更改了查询,现在我得到:#1054 - '字段列表'中的未知列 'a.region_count'
  • 请将 UNION 更改为 UNION ALL,因为这最终是有效的。您可能还希望将 a.region_count 更改为 a.region_count 作为 attribute_count,因为这是显示两个表属性的计数的同一字段。
  • UNION ALL 的好消息;)
猜你喜欢
  • 2016-08-08
  • 2010-11-12
  • 1970-01-01
  • 1970-01-01
  • 2015-05-30
  • 1970-01-01
  • 1970-01-01
  • 2012-11-18
相关资源
最近更新 更多