for*_*ran 13 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);
Run Code Online (Sandbox Code Playgroud)
进入这个:
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);
Run Code Online (Sandbox Code Playgroud)
(显然我的情况更长,涉及更多参考)
Mat*_*lie 11
您不对表进行别名,而是为表引用的实例添加别名.
这允许自连接等,因为您具有对同一物理表的引用的多个实例.这不是每个都AS在其他地方给该表一个新名称的情况,它只是引用该特定引用的别名.
在你的情况下,有两个显示停止...
插入表格到本身不是选择查询的一部分,它不是以同样的方式作为基准组foo,bar或者baz例如.所以,你根本不能对它进行别名(因为没有必要,它永远不会被引用).
此外,即使它是,您也不能通过别名引用整个表.您引用一个字段,作为通过集合进行迭代的查询的一部分.例如,这不起作用......
SELECT * FROM myTable AS xxx WHERE id = (SELECT MAX(id) FROM xxx)
Run Code Online (Sandbox Code Playgroud)
你可以使用...来解决后一个例子
WITH xxx AS (SELECT * FROM myTable)
SELECT * FROM xx WHERE id = (SELECT MAX(id) FROM xxx)
Run Code Online (Sandbox Code Playgroud)
但是这仍然让我们回到第一点,插入的表永远不会在语句的查询部分中被引用.
我能想到的唯一方法就是创建一个视图......
我认为答案是肯定的.AS之后没有了tableName
INSERT INTO table [ ( column [, ...] ) ]
{ DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query }
[ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]
Run Code Online (Sandbox Code Playgroud)
该AS子句从版本9.5开始成为PostgreSQL的一部分,但正如上面的@MatBailie所述,嵌套意味着您需要单独对INSERT查询和SELECT子查询进行别名,否则事情就会中断.例如:
> CREATE TABLE foo (id int, name text);
CREATE TABLE
> INSERT INTO foo VALUES (1, 'alice'), (2, 'bob'), (3, 'claire');
INSERT 0 3
> INSERT INTO foo AS f (SELECT f.* from f);
ERROR: relation "f" does not exist
LINE 1: INSERT INTO foo AS f (SELECT f.* from f);
^
-- Next line works, but is confusing. Pick distinct aliases in real life.
-- I chose the same 'f' to illustrate that the sub-select
-- really is separate.
> INSERT INTO foo AS f (SELECT f.* from foo f);
INSERT 0 3
> > SELECT * FROM foo;
id | name
----+--------
1 | alice
2 | bob
3 | claire
1 | alice
2 | bob
3 | claire
(6 rows)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26487 次 |
| 最近记录: |