[英]Mysql multiple select statements in single query with if condition
我有 id、name、type、active、...的表用户
我有另一个带有 orderid、userid 的表订单...
我想以这样的方式更新订单表
UPDATE orders SET userid=(SELECT id FROM users WHERE type="some" and active=1)
但我的问题是如果SELECT id FROM users WHERE type="some" and active=1
没有任何结果我想使用SELECT id FROM users WHERE type="some" limit 0,1
即第一个结果
我可以用任何语言(如 php/python 等)轻松做到这一点,但我只能访问 mysql 服务器,所以不能这样做
但是我怎么能在单个查询中使用纯 sql
我尝试了 if 语句但不工作
这是使用ORDER BY
的一种方法:
UPDATE orders o
SET userid = (SELECT u.id
FROM users u
WHERE u.type = 'some'
ORDER BY active DESC
LIMIT 1
);
这假设active
仅采用值0
和1
。 如果还有其他值,请使用ORDER BY (active = 1) DESC
。
使用users(type, active, id)
上的索引,性能应该很好。
另一种方法使用聚合和COALESCE()
:
UPDATE orders o
SET userid = (SELECT COALESCE(MAX(CASE WHEN active = 1 THEN u.id END),
MAX(u.id)
)
FROM users u
WHERE u.type = 'some'
);
我希望ORDER BY
会快一点,但有时 MySQL 会让我惊讶于相关子查询中的聚合。 也就是说,如果给定类型的行数很少,则性能差异可能不会很明显。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.