sql - SQL插入语句中表名的别名

标签 sql database postgresql alias

是否可以为要插入值的表指定别名?

我想在嵌套查询中指定条件,但表格太冗长...

像这样转动:

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 都会在别处为该表指定一个新名称,它只是引用该特定引用的别名。


在你的例子中,有两个展示塞子......

被插入的表本身不是选择查询的一部分,它不是与 foobarbaz 相同的引用集 例如。所以,你根本不能给它起别名(因为没有必要,它永远不会被引用)。

此外,即使是,您也不能通过别名引用整个表。您引用一个字段,作为遍历集合的查询的一部分。例如,这也不起作用...

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/

相关文章:

SQL 先进先出忠诚点

mysql - 在数据可能存在或可能不存在时连接表

javascript - 使用 View 在 couchDB 中的文档之间返回唯一值

c# - 如何更改已部署应用程序中的数据库设计?

postgresql - Sqlalchemy json 数组,在数组中执行类似查询

sql - 如何使用 SQL 创建开始日期和结束日期?

mysql - 将mysql中同一个表的行值与条件进行比较

来自不同数据库的 MySQL LEFT JOIN 2 查询

postgresql - 将数据插入强规范化数据库并保持完整性(Postgres)

sql - 如何在 PostgreSQL 中转换这些数据