以下查询返回表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'
我是否有办法在不使用子查询的情况下使用此功能?
答案 0 :(得分:5)
如果您重复case
子句中的where
,该语句将起作用:
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%')
这将返回相同的结果,但是如果您定义了<{1}}和nickname
,可以使用编辑并更改{{1}的第二个操作数}不要使用前导fullname
。
答案 1 :(得分: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
答案 2 :(得分:1)
对我来说,使用合并函数更有意义,假设昵称是NULL
或填充...
SELECT COALESCE(nickname,filename)
FROM table
WHERE COALESCE(nickname,filename) LIKE '%JOE%'