MySQL:首先查找特定值,然后获取第二个值

问题描述 投票:0回答:1

到目前为止,我的代码

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存在时,则不返回任何内容。

mysql sql sql-order-by
1个回答
2
投票

您不能在NULL表达式中使用IN,因此您需要将WHERE子句的第一部分更改为

WHERE status = 'priority' OR status IS NULL

您可以删除WHERE子句的第二部分,并简单地

ORDER BY status = 'priority` DESC

这将把具有status = 'priority'的行放在具有statusNULL的行的前面

因此您的查询整体上成为:

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
© www.soinside.com 2019 - 2024. All rights reserved.