Php 如何纠正mysql中的以下错误(子查询返回超过1行)
我有五张桌子,比如tb_原料、tb_配料、tb_食品、tb_订单、tb_库存 tb_原料拥有食品的所有原料 tb_配料将tb_食品和tb_原料与食品id作为外键连接起来 tb_orderitems将tb_食品与食品id作为外键连接 tb_库存具有所有原材料库存级别的详细信息,它将tb_原材料与物料id作为外键连接 现在我要做的是: 我必须编写一个更新查询来更改订购食品时的库存水平,我编写了以下查询:Php 如何纠正mysql中的以下错误(子查询返回超过1行),php,mysql,Php,Mysql,我有五张桌子,比如tb_原料、tb_配料、tb_食品、tb_订单、tb_库存 tb_原料拥有食品的所有原料 tb_配料将tb_食品和tb_原料与食品id作为外键连接起来 tb_orderitems将tb_食品与食品id作为外键连接 tb_库存具有所有原材料库存级别的详细信息,它将tb_原材料与物料id作为外键连接 现在我要做的是: 我必须编写一个更新查询来更改订购食品时的库存水平,我编写了以下查询: UPDATE tb_stock set tb_stock.quantity = (tb_stoc
UPDATE tb_stock set tb_stock.quantity = (tb_stock.quantity-(
SELECT tb_ingredients.usage_volume * sum(tb_order_item.qty)
FROM tb_ingredients
INNER JOIN tb_order_item
ON(tb_order_item.food_id=tb_ingredients.food_id
AND tb_order_item.order_id='ORD-T01-00289')
GROUP BY tb_ingredients.food_id ))
WHERE material_id=(SELECT tb_ingredients.material_id
FROM tb_ingredients
INNER JOIN tb_order_item
ON(tb_order_item.food_id=tb_ingredients.food_id
AND tb_order_item.order_id='ORD-T01-00289')
GROUP BY tb_ingredients.food_id)
但是
如果原材料数据只有一个,则该方法有效。如果相同的原材料数据再次重复,则会产生以下错误:
子查询返回超过1行
我怎样才能纠正这个问题?
请通知我,以限制子查询结果的行数 您可以将
限制1
添加到子查询中
或者通过选择不同的
/分组方式
使用
LEFT JOIN
而不是internal JOIN
也可能返回较少的记录。这不会发生,它只会更新tb_stock中过滤上述查询的最后一条记录!我没有访问tb_rawmatery.material_id,我只是从tb_配料中获取用于该过程的数据(maretial_id)。物料id是tb中的外键_ingredients@VeerasingamRajeevan也许曾经将该查询分解为单独的查询,然后重新组合它们。那些内部连接在我看来很可疑。如果您必须添加LIMIT 1
——当查看单个结果集时,应该很明显要限制哪些子查询——这肯定是其中之一,因为这正是它所抱怨的。如果没有内部连接
s,甚至可能不需要添加限制1
。我尝试过你的想法,但结果是相同的“只需更新三行中的一行即可更新”你有任何示例查询吗?是否重新缩进了SQL。。。为了使它可读。