如果找不到值,我想选择找到第一个值的行或最后一行。
id | customer | default_address -------------------------------- 1 John 0 2 Will 0 3 David null 4 Joe 0
在这种情况下,我想拥有id = 4的行,因为没有值为1的default_address。
id | customer | default_address -------------------------------- 1 John 0 2 Will 1 3 David null 4 Joe 0
在这种情况下,我需要第2行,因为我需要值为1的default_address。
默认地址的值可以是0,1和null。
答案 0 :(得分:2)
答案 1 :(得分:1)
您可以使用CASE EXPRESSION
条件排序的单个查询来实现此目的:
SELECT * FROM YourTable t
ORDER BY CASE WHEN t.default_address = 1 THEN t.id ELSE 999999999 end ASC,
t.id DESC
LIMIT 1;
这样,IF
有default_address = 1
的记录会先订购,如果没有,最后会先订购ID
,然后会选择第一个LIMIT 1
使用999999999
。
请注意,我在案例中使用了值default_address = 1
,因此如果有ID
行多于1行,它将选择第一个,此数字必须大于您的最大值{表格中的{1}}是为了使其正常运作。
答案 2 :(得分:0)
您可以使用此子查询。
SELECT * FROM(
(SELECT * FROM your_table WHERE default_address = 1 ORDER BY id LIMIT 1)
UNION ALL
(SELECT * FROM your_table ORDER BY id DESC limit 1)
) tmp
limit 1