【问题标题】:How to fetch rows with prefered where clause, but also with a fallback?如何使用首选 where 子句获取行,但也使用后备?
【发布时间】:2021-01-20 12:19:55
【问题描述】:

我有一个这样的查询(事务)用于从表中获取项目。我有一个 confirmed = '1' 的 where 子句,但是当没有找到该子句的行时,我想回退到忽略该 where 子句。

如何在 MySQL 服务器中执行此操作?

START TRANSACTION;

SELECT @id := `id`,`item` 
FROM `queue_items` 
WHERE `processed_at` IS NULL AND `completed_at` IS NULL AND confirmed = '1' ORDER BY `id` ASC 
LIMIT 1
FOR UPDATE;

UPDATE `queue_items` SET `processed_at` = @processedAt, `worker_id` = @workerId WHERE `id` = @id;

COMMIT;

【问题讨论】:

    标签: mysql sql sql-update sql-order-by sql-limit


    【解决方案1】:

    您可以使用条件排序:

    SELECT @id := `id`, `item` 
    FROM `queue_items` 
    WHERE `processed_at` IS NULL AND `completed_at` IS NULL
    ORDER BY (confirmed = 1) DESC, `id`
    LIMIT 1
    

    【讨论】:

    • 这还会先按最低ID排序吗?
    • @jacks:是的,因为第二个ORDER BY 标准。
    猜你喜欢
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 2020-07-18
    • 2014-03-09
    • 2013-06-03
    相关资源
    最近更新 更多