3

以下查询返回new_name表中所有的结果集names

SELECT
    CASE
        WHEN nickname = '' THEN fullname ELSE nickname END AS new_name,       
    FROM names

我正在尝试new_name使用以下查询进行搜索

SELECT
    CASE
        WHEN nickname = '' THEN fullname ELSE nickname END AS new_name,       
    FROM names
    WHERE new_name LIKE '%Joh%'

但是我得到了错误

“where 子句”中的未知列“new_name”

有没有办法让这个功能在不使用子查询的情况下工作?

4

3 回答 3

5

如果您casewhere子句中重复,该语句将起作用:

SELECT
CASE
    WHEN nickname = '' THEN fullname ELSE nickname END AS new_name      
FROM names
WHERE (CASE WHEN nickname = '' THEN fullname ELSE nickname END) LIKE '%Joh%'

它不会很快,因为它不会使用索引,但它应该可以工作。

一个更好的方法如下:

SELECT
CASE
    WHEN nickname = '' THEN fullname ELSE nickname END AS new_name      
FROM names
WHERE (nickname like '%Joh%') or (fullname LIKE '%Joh%')

这将返回相同的结果,但它可以使用索引nicknamefullname如果您定义它们,编辑并将第二个操作数更改LIKE为不使用前导%.

于 2012-04-10T01:18:07.047 回答
2
SELECT
    CASE
        WHEN nickname = '' THEN fullname ELSE nickname END AS new_name,       
    FROM names
    WHERE 
       (CASE
        WHEN nickname = '' THEN fullname ELSE nickname END) LIKE '%Joh%';

用整个替换列名case ... when ... then ... end

于 2012-04-10T01:18:36.990 回答
1

对我来说,使用合并功能更有意义,假设昵称要么是要么NULL填充......

SELECT COALESCE(nickname,filename)
FROM   table
WHERE COALESCE(nickname,filename) LIKE '%JOE%'
于 2012-04-10T01:26:26.113 回答