【问题标题】:mysql - error with creating temporary table from resultsetmysql - 从结果集中创建临时表时出错
【发布时间】:2012-02-07 22:54:02
【问题描述】:

我想从结果集中动态创建一个临时表,以便我可以针对这个结果集运行一些查询。

这是我的 sql:

CREATE TABLE temp_table_1 AS (SELECT * FROM A LEFT OUTER JOIN B ON A.id = B.id WHERE B.id IS null);


SELECT QUA.id, QUA.name, QUA.address, QUA.acc, QUA.module, QUA.tag
FROM QUA,temp_table_1
WHERE 
QUA.name = temp_table_1.name AND 
QUA.acc = temp_table_1.acc AND
QUA.tag = temp_table_1.tag

当我运行第一个查询来创建临时表时,我收到错误消息:

'重复的列名'id''

非常感谢您的帮助。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您将获得两个列 A.idB.id 没有别名来区分它们。请具体说明您选择的列:

    CREATE TABLE temp_table_1 AS (
      SELECT 
        A.id AS aid
        A.othercol AS a_othercol,
        B.id AS bid,
        B.othercol AS b_othercol
      FROM A LEFT OUTER JOIN B ON A.id = B.id WHERE B.id IS null);
    

    使用SELECT * 是不明智的,因为例如,如果原始CREATE TABLE 语句中的某些内容发生更改,您不能始终保证列返回的顺序。此外,正如您在此处发现的那样,名称相似的列在许多情况下都会导致问题。

    【讨论】:

    • 非常感谢您提供这些详细信息
    【解决方案2】:

    那是因为你这样做了SELECT *。结果集包含两个表中的所有列,因此如果它们都有一个名为“id”的列,它将被复制。

    【讨论】:

      猜你喜欢
      • 2013-03-01
      • 2014-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      • 1970-01-01
      • 2017-04-09
      相关资源
      最近更新 更多