Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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
Php 如何纠正mysql中的以下错误(子查询返回超过1行)_Php_Mysql - Fatal编程技术网

Php 如何纠正mysql中的以下错误(子查询返回超过1行)

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

我有五张桌子,比如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_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。。。为了使它可读。