Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将数据插入表时发生SQL错误_Mysql_Sql_Postgresql - Fatal编程技术网

Mysql 将数据插入表时发生SQL错误

Mysql 将数据插入表时发生SQL错误,mysql,sql,postgresql,Mysql,Sql,Postgresql,我试图在Postgres中执行以下查询:- INSERT INTO customer_specific_price (id, user_id, model_map_id , start_date , price_model_id,precedence ) SELECT coalesce(MAX(csp.id), 0)+1 , cp.user_id, eipm.id , pipt.start_date, pipt.price_model_id , pi.

我试图在Postgres中执行以下查询:-

INSERT INTO customer_specific_price (id, user_id, model_map_id , start_date  ,
            price_model_id,precedence )
SELECT  coalesce(MAX(csp.id), 0)+1 , cp.user_id, eipm.id , pipt.start_date,
        pipt.price_model_id , pi.precedence
FROM    customer_specific_price csp, customer_price cp, plan_item pi ,
        plan_item_price_timeline pipt , entity_item_price_map eipm
WHERE   cp.plan_item_id = pi.id and pipt.plan_item_id = cp.plan_item_id and 
        pi.plan_id is Null and pi.item_id = eipm.item_id
这是一个错误

错误:列cp.user\u id必须出现在GROUP BY子句中,或在聚合函数中使用


当表不包含任何id列时,它工作正常。但是当我添加id并使用coalesceMAXcsp.id时,0+1给出了上面提到的错误。

您的查询中有一个潜在错误,这一部分:

coalesce(MAX(csp.id), 0)+1 
可能会在结果行中放置错误的意外值我没有检查整个查询,加上您没有显示表结构,因此我不想做任何其他假设:如果子选择返回多个结果,那么所有这些结果对该列都具有相同的值

我猜您需要autoincrement列中的最后一个id,否则如果源表中的行可以删除,那么目标表中可能会有id冲突,假设所有这些id都是PKs:如果是这样,请不要使用group函数,而是使用子查询,如SELECT id from cps ORDER BY id DESC LIMIT 1 UNTESTESTED,这只是一个建议

除此之外,我认为您最好重新思考您试图实现的目标,然后您可能会编写一个不同的查询。

因此,当您添加id并使用coalesceMAXcsp.id,0+1时,您会收到错误消息error:column cp.user_id必须出现在GROUP BY子句中或在聚合函数中使用。这是因为在您的例子中,一旦引入聚合函数MAX,其他列也应该包含聚合函数MAX、SUM、COUNT等,或者它们应该用于在查询结束时使用GROUP BY子句进行分组。这是一个简短的指导小组

因此,您的查询可以通过其他列重写为group,如下所示:

INSERT INTO customer_specific_price (id, user_id, model_map_id , start_date  ,
            price_model_id,precedence )
SELECT  coalesce(MAX(csp.id), 0)+1 , cp.user_id, eipm.id , pipt.start_date,
        pipt.price_model_id , pi.precedence
FROM    customer_specific_price csp, customer_price cp, plan_item pi ,
        plan_item_price_timeline pipt , entity_item_price_map eipm
WHERE   cp.plan_item_id = pi.id and pipt.plan_item_id = cp.plan_item_id and 
        pi.plan_id is Null and pi.item_id = eipm.item_id
GROUP BY cp.user_id, eipm.id, pipt.start_date, pipt.price_model_id, pi.precedence;

我们可以把它的格式设置得稍微好一点吗?当必须左右滚动时,很难读取所有的查询。按照错误消息所说的做,您还有很多其他未分组和未聚合的列。这是Postgres,不是MySQL及其对GroupBy的扩展。可能结果不会像预期的那样快,但在尝试插入之前,您应该先获得此选择工作。