3

我在使用 SQL 时遇到了一点问题。我正在尝试在我的表中插入 2 个值。

这是我的查询: INSERT INTO tableinfo (table,date) VALUES ('Sell','24 August'); 但它不起作用。我有类似的东西:

SQL error:
ERROR:  syntax near "INTO"
LINE 1: SELECT COUNT(*) AS total FROM (INSERT INTO tableinfo (table,...
                                              ^
In statement::
SELECT COUNT(*) AS total FROM (INSERT INTO tableinfo (table,date) VALUES ('Sell','24 August')) AS sub

这是非常基本的,所以我不知道为什么它不起作用:( PostgreSQL 9.2.4

4

4 回答 4

5

我已经安装了 phpPgAdmin 来尝试重现您的错误。我在尝试创建测试表时立即得到了它:

在此处输入图像描述

所以看起来 phpPgAdmin 将您的查询包装到select count(*) as total from (...). 我发现只有在查询页面上的“分页结果”复选框设置为打开时才会发生这种情况(显然 phpPgAdmin 试图计算它将获得多少行,然后逐页显示)。取消选中它,您的查询将正常工作:

在此处输入图像描述

于 2013-08-24T17:50:14.337 回答
4

It's not the INSERT that is the problem, it is the invalid SQL that you are trying to issue. Try your insert first then a separate count(*) query, or if you are using PostgreSQL 9.1+ you can use Common Table Expressions and RETURNING

WITH ins AS (
     insert into tableinfo ("table","date") 
     values ('Sell','24 August') RETURNING "table"
)
select count(*) 
from ins;
于 2013-08-24T16:42:03.423 回答
0

错误消息无法理解。但就其可见性而言,您无法从执行的操作中进行选择 (INSERT)。SELECT 语句仅在从关系中选择后显示。对于您的情况,另一种选择是分别执行 2 个查询,或者如果您被允许执行一次,则使用事务。

于 2013-08-24T16:46:03.360 回答
0

据我所知,您的输入select不是通过insert语句插入数据的基础表,而是插入语句的返回值(例如RETURNING),这里缺少。

查看(优秀的)Postgres 文档,尤其是with_query_name可以使用插入的部分。

于 2013-08-24T16:48:53.637 回答