以下查询返回new_name表中所有结果集的结果集names
SELECT
CASE
WHEN nickname = '' THEN fullname ELSE nickname END AS new_name,
FROM names
Run Code Online (Sandbox Code Playgroud)
我正在尝试new_name使用以下查询进行搜索
SELECT
CASE
WHEN nickname = '' THEN fullname ELSE nickname END AS new_name,
FROM names
WHERE new_name LIKE '%Joh%'
Run Code Online (Sandbox Code Playgroud)
但是我得到了错误
'where子句'中的未知列'new_name'
有没有一种方法可以在不使用子查询的情况下使用此功能?
如果你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%'
Run Code Online (Sandbox Code Playgroud)
它不会很快,因为它不会使用索引,但它应该工作.
一个更好的方法如下:
SELECT
CASE
WHEN nickname = '' THEN fullname ELSE nickname END AS new_name
FROM names
WHERE (nickname like '%Joh%') or (fullname LIKE '%Joh%')
Run Code Online (Sandbox Code Playgroud)
这将返回相同的结果,但它可以使用索引nickname,fullname如果您定义它们,编辑并更改第二个操作数LIKE以不使用前导%.