【发布时间】:2017-05-08 14:56:42
【问题描述】:
在 MySQL 中,是否可以设置一个查询,从一组 WHERE 子句中返回第一个非空结果。例如,如果我有一张桌子
|id |a |b |
----------------
1 2 3
4 5 6
7 8 9
这些列是唯一的,我想要一个查询,几乎像
SELECT * FROM t
WHERE id = NULL OR a = 2 OR b = 6
只返回第一行以匹配任何 OR 子句,顺序为idab,几乎就像一个 COALESCE。
以下是一些示例查询和预期结果
SELECT * FROM t WHERE id = 7 OR a = 99 OR b = 3 --> (7, 8, 9)
SELECT * FROM t WHERE id = 7 OR a = NULL OR b = NULL --> (7, 8, 9)
SELECT * FROM t WHERE id = NULL OR a = 5 OR b = 77 --> (4, 5, 6)
SELECT * FROM t WHERE id = NULL OR a = NULL OR b = 6 --> (4, 5, 6)
SELECT * FROM t WHERE id = 1 OR a = 5 OR b = 9 --> (1, 2, 3)
这可能吗?
【问题讨论】:
-
我不确定您的问题是什么,因为您的数据没有任何
id = NULL可以添加更多行并指定所需的输出和更多测试用例 -
@JuanCarlosOropeza 我添加了更多示例结果
-
您需要一个订单登录。例如,在您的第三个示例中:
ID IS NULL OR a = 5 OR b = 77如果您有两行{NULL, 5, NULL}和{NULL, NULL, 77}会显示哪一行? -
我们应该显示
{NULL, 5, NULL}行,因为它匹配应该优先于b列的a列 -
那你为什么不接受juergen的回答呢?
标签: mysql