Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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 update语句给出uknown列错误_Mysql_Sql - Fatal编程技术网

Mysql update语句给出uknown列错误

Mysql update语句给出uknown列错误,mysql,sql,Mysql,Sql,我试图根据第二个表中的categories_id是否等于90来更新1列,但得到未知列错误 以下是我的sql: UPDATE products SET qty='20' WHERE products.products_id = products_to_categories.products_id AND products_to_categories.categories_id = '90' 我得到的错误是 SQL中“where子句”中的未知列“products\u to\u categorie

我试图根据第二个表中的categories_id是否等于90来更新1列,但得到未知列错误

以下是我的sql:

UPDATE products SET qty='20' 
WHERE products.products_id = products_to_categories.products_id AND products_to_categories.categories_id = '90'
我得到的错误是


SQL中“where子句”中的未知列“products\u to\u categories.products\u id”必须使用
from
(或
update
delete
)语句引入表名。你的意思可能是:

UPDATE products
    SET qty = '20' 
    WHERE exists (select 1
                  from products_to_categories ptc
                  where ptc.products_id = products.products_id AND
                        ptc.categories_id = '90'
                 );
另一种方法是使用联接:

UPDATE products p join
       products_to_categories ptc
       on  ptc.products_id = products.products_id AND
           ptc.categories_id = '90'
    SET p.qty = '20';

如果存在多个匹配项,则此方法效果更好。

不能在这样的更新命令中组合两个表。使用子查询

UPDATE products SET qty='20' 
WHERE products.products_id IN (SELECT `ptc`.`products_id`
                               FROM   `products_to_categories` `ptc`
                               WHERE  `ptc`.categories_id = '90')

您需要在join语句中包含该表,
products\u to\u categories。除非该表已联接,否则无法找到products\u id

UPDATE products a
       INNER JOIN products_to_categories b
             ON a.products_id = b.products_id
SET    a.qty = '20' 
WHERE  b.categories_id = '90'
您可以使用mysql的:

查看此查询语法是否已选中


内部WHERE子句中的第一个条件不是多余的吗?你是说他编写sql查询的方式只适合从一个表进行更新吗?@Itay。固定的。我想我是在
=
存在之间进行选择,两者都做了。@gordon我都没有:)我要试试小提琴。请注意,我没有投你反对票。我不再投反对票了。@GordonLinoff好的,我把它整理好了。我正在考虑删除多表,结果弄得一团糟。谢谢你的关注。@GordonLinoff我也不投反对票,除非是危险的代码,然后我就为什么要留下评论。如果错了,我建议你改正一下。否决票是卑鄙的。顺便说一句,我注意到你是一台SQL机器!蒙戈尊重巴特警长。
UPDATE products
JOIN products_to_categories
  ON products.products_id = products_to_categories.products_id
  AND products_to_categories.categories_id = '90'
SET qty='20'
UPDATE products p, products_to_categories pc
SET p.qty='20' 
WHERE p.products_id = pc.products_id AND pc.categories_id = '90'