我想从结果集中动态创建一个临时表,以便我可以针对此结果集运行一些查询。
这是我的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''
非常感谢你的帮助。
答案 0 :(得分:4)
您需要在没有别名的情况下获取A.id
和B.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”的列,则它将被复制。