68

特定のIDに対してnullでない整数フィールドを返すこの種の単純なクエリがあります。

SELECT field1 FROM table WHERE id = 123 LIMIT 1;

ID が見つからない場合、結果セットは空になります。結果がなくても、常に値を返すクエリが必要です。

私はこれを機能させていますが、同じサブクエリを2回実行するため、好きではありません:

SELECT IF(EXISTS(SELECT 1 FROM table WHERE id = 123) = 1, (SELECT field1 FROM table WHERE id = 123 LIMIT 1), 0);

行が存在する場合は field1 を返し、そうでない場合は 0 を返します。それを改善する方法はありますか?

ありがとう!

いくつかのコメントと回答に従って編集します:はい、単一のクエリステートメントにする必要があり、値を1つだけ返す必要があるため、カウントトリックを使用できません(参考までに、Java/Springメソッド SimpleJdbcTemplate.queryForLong() でクエリを実行します)。

4

8 に答える 8

137

MySQLには、結果がnullの場合に値を返す関数があります。クエリ全体で使用できます。

SELECT IFNULL( (SELECT field1 FROM table WHERE id = 123 LIMIT 1) ,'not found');
于 2012-09-16T20:12:04.140 に答える
19

count(id)を含めることができます。それは常に戻ります。

select count(field1), field1 from table where id = 123 limit 1;

http://sqlfiddle.com/#!2/64c76/4

于 2012-09-16T19:24:31.720 に答える
0

で検索してくださいLEFT OUTER JOIN。MySQL が結合句でインラインを許可するかどうかはわかりませんがVALUES、この目的のために定義済みのテーブルを使用できます。

于 2012-09-16T19:26:45.263 に答える