0

前のスレッドで複数の行について質問しましたが、今は単一の行について知る必要があります。これはクエリの例です。

SELECT * FROM table1 WHERE this = 5 LIMIT 1

しかし、行が見つからない場合は、別の値を持つレコードを見つけます。

SELECT * FROM table1 WHERE this = 1 LIMIT 1

だから私が欲しいのは、値が5の行を見つけて、見つからない場合はデフォルトで値が1の行を見つけることです。単一のクエリでそれを行うにはどうすればよいですか? ORステートメントはそのように機能しますか?

SELECT * FROM table1 WHERE this = 5 OR this = 1 LIMIT 1

OR ステートメントの順序は、値が 5 の行を見つけようとしますか?見つかった場合、停止して行を返しますか? 見つからない場合は、1 を探してその行を返しますか? そうでない場合、1 つの値を検索する単一のクエリでこれを行うにはどうすればよいですか?

私はこのクエリを考えていました:

SELECT * FROM table1 WHERE this IN(5,1) ORDER BY this ASC LIMIT 1

ただし、両方の値が正しく見つかった場合、このクエリは常に 1 の値を返しますか? だから私はこれを試しました:

SELECT * FROM table1 WHERE this IN(5,1) ORDER BY this DESC LIMIT 1

しかし、両方の行が正しい場合、これは常に 5 の値を返しますか?

4

2 に答える 2

1

あなたの質問は 5 の検索を優先するように見え、見つからない場合にのみ 1 を検索します。したがって、2 番目のソリューションは要件に適合します。5 しか見つからないか、5 と 1 の両方が存在するかに関係なく、5 の値を返します。

2番目のオプション

SELECT * FROM table1 WHERE this IN(5,1) ORDER BY this DESC LIMIT 1
于 2012-05-20T11:26:17.027 に答える
0

これを試して

SELECT * 
FROM table1 tab 
WHERE tab.this = IF((SELECT COUNT(*) 
                     FROM table1 
                     WHERE this = 5) > 0, 5, 1) 

IF 内のクエリはカウントをチェックしています。

パフォーマンスについてはわかりませんが、これで問題は解決すると思います。

于 2012-05-20T11:24:41.940 に答える