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

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%')

これは同じ結果を返しますが、インデックスを使用できnicknameますfullname。それらを定義する場合は、 の 2 番目のオペランドを編集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 に答える