是否可以为要插入值的表指定别名?
我想在嵌套查询中指定条件,但表格太冗长...
像这样转动:
INSERT INTO my_table_with_a_very_long_name (col_a, col_b, col_c)
SELECT foo, bar, baz
FROM other_table
WHERE
other_table.some_value >
(SELECT max(other_value) FROM my_table_with_a_very_long_name);
进入这个:
INSERT INTO my_table_with_a_very_long_name AS t (col_a, col_b, col_c)
SELECT foo, bar, baz
FROM other_table
WHERE
other_table.some_value > (SELECT max(other_value) FROM t);
(显然我的案例更长,涉及更多的引用文献)
最佳答案
您不为表添加别名,而是为表引用的实例添加别名。
这允许自连接等,因为您有多个引用同一个物理表的实例。并不是每个 AS
都会在别处为该表指定一个新名称,它只是引用该特定引用的别名。
在你的例子中,有两个展示塞子......
被插入的表本身不是选择查询的一部分,它不是与 foo
、bar
或 baz 相同的引用集
例如。所以,你根本不能给它起别名(因为没有必要,它永远不会被引用)。
此外,即使是,您也不能通过别名引用整个表。您引用一个字段,作为遍历集合的查询的一部分。例如,这也不起作用...
SELECT * FROM myTable AS xxx WHERE id = (SELECT MAX(id) FROM xxx)
您可以使用...绕过后一个示例
WITH xxx AS (SELECT * FROM myTable)
SELECT * FROM xx WHERE id = (SELECT MAX(id) FROM xxx)
但这仍然让我们回到第一点,被插入的表永远不会在语句的查询部分被引用。
我能想到的接近的唯一方法是创建一个 View ...
关于sql - SQL插入语句中表名的别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9099906/