到目前为止,我的代码
SELECT * FROM gp
WHERE status IN ('priority', NULL)
AND (status='priority' OR EXISTS(SELECT * FROM gp WHERE status IS NULL))
LIMIT 1
我正在尝试使用status = 'priority'
获取第一行,否则,将使用status = NULL
获取第一行。状态可能还有其他值,但是我只想先获得priority
(如果有),然后再获得NULL
。
到目前为止,我的代码所做的是,当'priority'
行存在时,它将接受它们,但是当只有NULL
存在时,则不返回任何内容。
您不能在NULL
表达式中使用IN
,因此您需要将WHERE
子句的第一部分更改为
WHERE status = 'priority' OR status IS NULL
您可以删除WHERE
子句的第二部分,并简单地
ORDER BY status = 'priority` DESC
这将把具有status = 'priority'
的行放在具有status
的NULL
的行的前面
因此您的查询整体上成为:
SELECT * FROM gp
WHERE status = 'priority' OR status IS NULL
ORDER BY status = 'priority` DESC
LIMIT 1
[注意,要获得带有status = 'priority'
的“第一”行,您需要一个排序列(SQL表是无序的,因此没有排序列的“第一”没有任何意义),您可以将其添加到ORDER BY
子句中:
SELECT * FROM gp
WHERE status = 'priority' OR status IS NULL
ORDER BY status = 'priority` DESC, id ASC
LIMIT 1