【问题标题】:sql UPDATE SET WHERE condition gives error 1242sql UPDATE SET WHERE 条件给出错误 1242
【发布时间】:2021-07-31 22:54:42
【问题描述】:

我收到错误 1242 子查询返回超过 1 行

我想要的是更新列 bio 并将其设置为 如果产品包含这些添加物,则为“生物植物”。

UPDATE product
SET bio = 'bio-plant'
WHERE ( SELECT distinct product.Id_Product
        FROM product , product_has_additions
        WHERE product_has_additions.code IN ('E170', 'E220', 'E296', 'E300', 'E306', 'E322', 'E330', 'E333', 'E334', 'E335', 'E336', 'E341', 'E392', 'E400', 'E401', 'E402', 'E406', 'E407', 'E410', 'E412', 'E414', 'E415', 'E422', 'E440', 'E464')
        AND product.Id_Product = product_has_additions.Id_Product
       );

【问题讨论】:

  • 您是否期望子查询只返回 1 行?
  • 否,但我必须如何将所有包含这些添加物的产品的 bio 列设置为“bio-plant”?
  • ...WHERE Id_Product IN ( SELECT distinct product.Id_Product... 会更好用

标签: mysql sql-update conditional-statements mysql-error-1242


【解决方案1】:

我认为你真正需要的是两个表的连接:

UPDATE product p
INNER JOIN product_has_additions a
ON a.Id_Product = p.Id_Product
SET p.bio = 'bio-plant'
WHERE a.code IN (
  'E170', 'E220', 'E296', 'E300', 'E306', 'E322', 'E330', 'E333', 
  'E334', 'E335', 'E336', 'E341', 'E392', 'E400', 'E401', 'E402', 
  'E406', 'E407', 'E410', 'E412', 'E414', 'E415', 'E422', 'E440', 'E464'
)

或者,使用EXISTS

UPDATE product p
SET p.bio = 'bio-plant'
WHERE EXISTS (
  SELECT 1 FROM product_has_additions a
  WHERE a.Id_Product = p.Id_Product
    AND a.code IN (
     'E170', 'E220', 'E296', 'E300', 'E306', 'E322', 'E330', 'E333', 
     'E334', 'E335', 'E336', 'E341', 'E392', 'E400', 'E401', 'E402', 
     'E406', 'E407', 'E410', 'E412', 'E414', 'E415', 'E422', 'E440', 'E464'
  )
)

【讨论】:

    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 2015-10-03
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    相关资源
    最近更新 更多