1

完全にいっぱいで、行のどこかに入力値がある最初の行を選択するクエリを作成しようとしています。それ以外の場合は何も取得しません。これが私がこれまでに作ったものです:

CASE WHEN `name_1` != '' and `name_2` != '' and `name_3` != ''  and `name_4` = 'Jimmy' THEN (SELECT`name_1`,`name_2`,`name_3`,`name_4` FROM `names`) end
CASE WHEN `name_1` != '' and `name_2` != '' and `name_4` != ''  and `name_3` = 'Jimmy' THEN (SELECT`name_1`,`name_2`,`name_3`,`name_4` FROM `names`) end
CASE WHEN `name_1` != '' and `name_4` != '' and `name_3` != ''  and `name_2` = 'Jimmy' THEN (SELECT`name_1`,`name_2`,`name_3`,`name_4` FROM `names`) end
CASE WHEN `name_4` != '' and `name_2` != '' and `name_3` != ''  and `name_1` = 'Jimmy' THEN (SELECT`name_1`,`name_2`,`name_3`,`name_4` FROM `names`) end

それはエラーを返します:

1064 - SQL 構文にエラーがあります。1 行目の 'CASE WHEN name_1!= '' and name_2!= '' and name_3!= '' and name_4= ''の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

明らかに間違って書かれているので、正確に何が間違っているのですか?私はこれを正しい方法で行っていますか?

4

2 に答える 2

2

それは正しい使い方ではありませんCASEJIMMY1つまたは複数の列に存在する可能性があり、どの列もnullにできない行を選択したいと思いますが、

SELECT  `name_1`,`name_2`,`name_3`,`name_4` 
FROM    `names`
WHERE   `name_1` IS NOT NULL AND 
        `name_2` IS NOT NULL AND 
        `name_3` IS NOT NULL AND 
        `name_4` IS NOT NULL AND
        (
            `name_1` = 'JIMMY' OR 
            `name_2` = 'JIMMY' OR 
            `name_3` = 'JIMMY' OR 
            `name_4` = 'JIMMY' 
        )

このソリューションは、を使用するよりもはるかに短いと思いますCASE

于 2012-10-06T16:11:02.263 に答える
1

ステートメントは、ある種の DML ワード ( SELECTUPDATECALLDO...) で開始する必要があります。そうは言っても、名前には4列ではなく、おそらく2列(name、name_value)が必要なため、テーブルは正規化されていません。

を使用するための正しい構文は次のCASEようになります。

SELECT
    CASE
        WHEN name_1 <> '' AND name_2 <> '' AND name_3 <> '' AND name_4 = 'Jimmy'
            THEN some_column
        WHEN ...
            THEN ...
    END AS column
FROM names

あなたの投稿を読むと、最初の空でないフィールドにたどり着こうとしているようです。次のようなことを試すことができます:

SELECT name_1, name_2, name_3, name_4
FROM names
WHERE (name_1 <> '' AND name_2 <> '' AND name_3 <> '' AND name_4 = 'Jimmy') OR
    (name_1 <> '' AND name_2 <> '' AND name_4 <> '' AND name_3 = 'Jimmy') OR
    ...
于 2012-10-06T16:05:51.827 に答える