mysql - 从结果集创建临时表时出错

时间:2012-02-07 14:46:31

标签: mysql

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

这是我的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

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

'Duplicate Colum Name'id''

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:4)

您需要在没有别名的情况下获取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语句中的某些内容发生了变化,您无法始终保证列将返回的顺序。此外,正如您在此处发现的那样,类似命名的列在许多情况下都会导致问题。

答案 1 :(得分:2)

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