MySQL WHERE 如果 NULL 选择另一列

use*_*195 3 mysql

这是我的mysql表

id      date_created                date_active
1       2014-06-07 18:24:38     NULL
2       2014-06-07 18:24:38     2014-06-07 18:24:38
3       2014-06-07 18:24:38     2014-06-07 18:24:38
4       2014-06-07 18:24:38     NULL
5       2014-06-07 18:24:38     NULL
6       2014-06-07 18:24:38     NULL
7       2014-06-07 18:24:38     2014-06-07 18:24:38
8       2014-06-07 18:24:38     2014-06-07 18:24:38
9       2014-06-07 18:24:38     2014-06-07 18:24:38
10      2014-06-07 18:24:38     NULL
Run Code Online (Sandbox Code Playgroud)

如果列为 NULL,如何设置 WHERE 选择另一列?

SELECT * 
FROM TABLE 
WHERE date_active = 'value'. 
Run Code Online (Sandbox Code Playgroud)

如果 date_active 为 NULL,则应使用 date_created 列。

Mar*_*ith 5

一般来说你可以使用COALESCE

SELECT * 
FROM TABLE 
WHERE COALESCE(date_active,date_created) = 'value'
Run Code Online (Sandbox Code Playgroud)

但这是不可控制的。根据可用的索引,您可能会发现以下内容

SELECT * 
FROM TABLE 
WHERE date_active = 'value' OR 
      (date_active IS NULL AND date_created = 'value')
Run Code Online (Sandbox Code Playgroud)

甚至

SELECT * 
FROM TABLE 
WHERE date_active = 'value'
UNION ALL
SELECT * 
FROM TABLE 
WHERE  (date_active IS NULL AND date_created = 'value')
Run Code Online (Sandbox Code Playgroud)

表现更好