MYSQL更新连接为空

Rai*_*kas 0 mysql sql

我想知道如果product_id没有在其他表中分配任何category_id,我可以将产品状态更改为0.

+------------+----------+  +------------+-------------+
| Product_id |  Status  |  | Product_id | cateogry_id |
+------------+----------+  +------------+-------------+
|      1     |     1    |  |     1      |      10     |
|      2     |     1    |  |     3      |      20     |
|      3     |     1    |  +------------+-------------+
+------------+----------+
Run Code Online (Sandbox Code Playgroud)

结果我需要product_id = 2,它没有类别状态为0.是否有一个MySQL查询?

Joh*_*ell 6

首先,您需要获取表中不存在的行.

table1是具有状态
table2的表,是具有类别id的表

           table1                     table2
+------------+----------+  +------------+-------------+
| Product_id |  Status  |  | Product_id | cateogry_id |
+------------+----------+  +------------+-------------+
|      1     |     1    |  |     1      |      10     |
|      2     |     1    |  |     3      |      20     |
|      3     |     1    |  +------------+-------------+
+------------+----------+
Run Code Online (Sandbox Code Playgroud)

所以现在运行此查询以获取没有category_id的行

SELECT product_id 
FROM table1 t
LEFT JOIN table2 t2 ON t2.product_id = t.product_id
WHERE t2.product_id IS NULL
Run Code Online (Sandbox Code Playgroud)

现在像这样更新table1

UPDATE table1 t,
(   SELECT product_id 
    FROM table1 t
    LEFT JOIN table2 t2 ON t2.product_id = t.product_id
    WHERE t2.product_id IS NULL
) t1
SET t.status = 0
WHERE t1.product_id = t.product_id
Run Code Online (Sandbox Code Playgroud)

DEMO