mysql 查询内连接条件 where id IN
mysql query inner join condition where id IN
你能否建议进行简单查询的最佳方法,我有 2 个 table 需要更新 table 1 个状态列,然后如果另一列为 1,则更新另一个 table2。主要问题是当我使用 where id IN ids
时该怎么做
UPDATE table1 SET status = 1 WHERE id IN (ids)
如果每个 Id 的 columnX 都是 1 那么
UPDATE table2 SET status = 1 for that id
不完全确定你的意思,但我猜你可以使用 UPDATE JOIN 的一些变体,基本语法如下:
UPDATE table1 t1
JOIN table2 t2
ON t2.table1_id = t1.id
SET t1.status = 1,
t2.status = CASE
WHEN t1.columnX = 1 THEN 1 /* Update if columnX is 1 */
ELSE t2.status /* Use old status if not */
END CASE
WHERE t1.id IN (...)
如果 columnX 为 1 的概率很低,那么您可以拆分第二部分并在事务中执行单独的查询:
UPDATE table1 t1
SET t1.status = 1
WHERE t1.id IN (...)
UPDATE table2 t2
JOIN table1 t1
ON t1.id = t2.table1_id
AND t1.columnX = 1
SET t2.status = 1
WHERE t2.table1_id IN (...)
你能否建议进行简单查询的最佳方法,我有 2 个 table 需要更新 table 1 个状态列,然后如果另一列为 1,则更新另一个 table2。主要问题是当我使用 where id IN ids
时该怎么做UPDATE table1 SET status = 1 WHERE id IN (ids)
如果每个 Id 的 columnX 都是 1 那么
UPDATE table2 SET status = 1 for that id
不完全确定你的意思,但我猜你可以使用 UPDATE JOIN 的一些变体,基本语法如下:
UPDATE table1 t1
JOIN table2 t2
ON t2.table1_id = t1.id
SET t1.status = 1,
t2.status = CASE
WHEN t1.columnX = 1 THEN 1 /* Update if columnX is 1 */
ELSE t2.status /* Use old status if not */
END CASE
WHERE t1.id IN (...)
如果 columnX 为 1 的概率很低,那么您可以拆分第二部分并在事务中执行单独的查询:
UPDATE table1 t1
SET t1.status = 1
WHERE t1.id IN (...)
UPDATE table2 t2
JOIN table1 t1
ON t1.id = t2.table1_id
AND t1.columnX = 1
SET t2.status = 1
WHERE t2.table1_id IN (...)