【问题标题】:SQL - select rows based on column valueSQL - 根据列值选择行
【发布时间】:2023-02-03 12:52:44
【问题描述】:

我这辈子都弄不明白——这可能真的很容易。我想选择第一个实例 is_cover = 1 但如果带有 1 的记录不存在,则选择 is_cover = NULL 作为后备。

这张表可以有多张照片,我需要先返回带有is_cover = 1 的照片(然后回退到is_cover = NULL)。

这是一些伪代码:

SELECT * FROM photos
WHERE (status_id = 1 AND is_cover IS NULL)
OR (status_id = 1 AND is_cover = 1)

【问题讨论】:

    标签: mysql sql select


    【解决方案1】:

    您可以将 ORDER BYNULLS LAST 一起使用

    SELECT * FROM photos
    WHERE (status_id = 1 AND is_cover IS NULL)
    OR (status_id = 1 AND is_cover = 1) ORDER BY is_cover NULLS LAST
    

    让我知道这是否有帮助

    对于 MariaDB,请尝试以下

    ORDER BY IF(is_cover IS NULL, 0, 1), is_cover ASC;
    

    【讨论】:

    • 条件可以缩短为status_id = 1 AND (is_cover IS NULL OR is_cover = 1)
    • MariaDB 中 NULLS LAST 的等价物是什么?
    • @ChrisBookmyer 试试ORDER BY IF(is_cover IS NULL, 0, 1), is_cover ASC;
    猜你喜欢
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多