插入..PostgreSQL 中的 select 语句将 PHP 中的插入值与 select 语句相结合


insert...select statement in postgresql combining inserted values from php with a select statement

我看过一些关于如何插入选定值的SO帖子,但它们总是在所有插入的值都来自select语句的情况下。我正在努力插入部分由 php 调用提供且部分由 select 语句提供的数据。以下是我想做的:

$query = "INSERT INTO deals (latitude, longitude, interested, id, the_geom) VALUES ($1, $2, $3, $4, SELECT the_geom FROM userlocs WHERE id=$3)";
$rs = pg_query_params($con, $query, array($latitudeS, $longitudeS, $id_pg , $id_add));

这给了我以下不太有用的错误:

 pg_query_params(): Query failed: ERROR: syntax error at or near "SELECT" LINE 1: ...interested, id, the_geom) VALUES ($1, $2, $3, $4, SELECT the... ^ in /var/www/html/join.php on line 30

可以做我想做的事情吗?如果是这样,如何修改我的语法?

非常感谢您的任何建议。

最简单的解决方法可能是将SELECT语句放在括号中

INSERT INTO deals (latitude, longitude, interested, id, the_geom) 
VALUES ($1, $2, $3, $4, (SELECT the_geom FROM userlocs WHERE id = $3))

下面是一个 SQLFiddle 演示

根据您是否始终期望值来自userlocs,您还可以通过以下两种方式之一使用INSERT ... SELECT语法

INSERT INTO deals (latitude, longitude, interested, id, the_geom) 
SELECT $1, $2, $3, $4, the_geom FROM userlocs WHERE id = $3

INSERT INTO deals (latitude, longitude, interested, id, the_geom) 
SELECT $1, $2, $3, $4, (SELECT the_geom FROM userlocs WHERE id = $3)