Mysql SELECT第一行找到值,如果没有值则为最后一行

时间:2016-04-05 09:31:45

标签: mysql sql select

如果找不到值,我想选择找到第一个值的行或最后一行。

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。

3 个答案:

答案 0 :(得分:2)

不是那么花哨,但我想这应该可以运行并且运行得非常快

ASP.global_asax

SQLFiddle demo

答案 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;

这样,IFdefault_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