【问题标题】:mysql union to not workingmysql联合无法正常工作
【发布时间】:2012-05-29 19:41:31
【问题描述】:

您好,我正在尝试合并两个表。

我的 id 只存在于左表中,而我的 id 只存在于右表中。我想得到一张包含所有 id 的表。我试过了:

select * from temp_hours as a
    left outer join temp_orders as o on a.proj_id = o.proj_id
union
select * from temp_hours as a
    right outer join temp_orders as o on a.proj_id = o.proj_id

但我得到了错误:

Can't reopen table: 'a'

任何想法我怎么能做到这一点?服务器版本:5.0.51a-24+lenny4 (Debian)

【问题讨论】:

  • 尝试将两个 sql 查询放入 ()。喜欢(query1) union (query2)
  • 或在第二次选择中使用不同的别名。
  • 不确定这对您的情况是否有帮助,我意识到这已经很老了,但也许这会像我一样帮助其他人。默认情况下,联合使用 DISTINCT。如果联合拉取相同的信息,它会自动只显示新的 DISTINCT 信息。我必须为每个选择添加一些不同的东西才能正确显示。 SELECT 列,1 FROM... UNION SELECT 列,2 FROM... 更多:forums.mysql.com/read.php?10,220906,220926#msg-220926

标签: mysql join merge union


【解决方案1】:

按照建议添加括号或更改缩写...

select * from temp_hours as a
    left outer join temp_orders as ao on a.proj_id = ao.proj_id
union
select * from temp_hours as b
    right outer join temp_orders as bo on b.proj_id = bo.proj_id

【讨论】:

    【解决方案2】:

    只需在您的选择查询周围添加一些括号:

    (select * from temp_hours as a
        left outer join temp_orders as o on a.proj_id = o.proj_id)
    union
    (select * from temp_hours as a
        right outer join temp_orders as o on a.proj_id = o.proj_id)
    

    例如,参见docu 中的示例。

    【讨论】:

    • 谢谢,但我仍然遇到同样的错误。我正在使用临时表,这可能是个问题吗?
    • 您不能在同一个查询中多次引用 TEMPORARY 表 - 找到它
    【解决方案3】:

    每个选择都需要括号

    (select * from temp_hours as a
        left outer join temp_orders as o on a.proj_id = o.proj_id)
    union
    (select * from temp_hours as a
        right outer join temp_orders as o on a.proj_id = o.proj_id)
    

    但是,你得到的错误似乎是temporary table limitation.

    【讨论】:

      猜你喜欢
      • 2012-05-16
      • 1970-01-01
      • 1970-01-01
      • 2017-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-24
      相关资源
      最近更新 更多