繁体   English   中英

Mysql 多个 select 语句在单个查询中使用 if 条件

[英]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仅采用值01 如果还有其他值,请使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM