2013-08-24 44 views
3

我遇到了一些SQL问题。 我试图将2个值插入到我的表中。 ('''''''''''''''');这是我的查询:INSERT INTO tableinfo(table,date)VALUES('Sell','8月24日'); 但它不工作。我有类似的东西:INSERT INTO PostgreSQL

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

+0

什么是错误讯息? – Jost

+0

你不能像这样组合一个插入和一个SELECT。你想达到什么目的? (你可能想将psql切换到英文错误消息,以便这里的每个人都可以阅读它们)。 –

+1

你使用phpAdmin吗? –

回答

4

这不是,这是问题的INSERT,它是您试图发出无效的SQL。首先试试你的插入,然后一个单独的COUNT(*)查询,或者如果你正在使用PostgreSQL 9.1+可以使用Common Table Expressions并返回

WITH ins AS (
    insert into tableinfo ("table","date") 
    values ('Sell','24 August') RETURNING "table" 
) 
select count(*) 
from ins; 
+1

[数据修改CTE又名可写CTE](http://www.postgresql.org/docs/9.1/static/queries-with.html#QUERIES-WITH-MODIFYING)自Postgres 9.1开始提供。 –

+0

哦,对,我总是忘记 - 我在生产中从9.0跳到9.2。谢谢,我会更新我的答案以反映这一点。 – bma

0

错误消息是不理解但是,只要它是可见的,你无法从执行的操作中选择(INSERT)。 SELECT语句仅在从关系中选择后才显示。如果允许执行单个执行,则可以选择分别执行2个查询或使用事务。

+0

您可以从INSERT语句的结果中进行选择。看到bma的回答。但至少在我看来,这是完全不清楚的,究竟是OP究竟在做什么。 –

0

据我知道你输入你的select是不是底层表所在的数据是通过insert语句插入,但在这里失踪的INSERT语句(如RETURNING)的返回值。

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

3

我已经安装phpPgAdmin来尝试重现您的错误。我得到了它马上试图创建一个测试表时:

enter image description here

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

enter image description here

+0

好的侦探! +1 – bma

+0

美好的一天,新的英语单词到我的语法:) –