読者です 読者をやめる 読者になる 読者になる

本来空行を返すSQLで1行返す

SQL

例えば、ユーザIDからユーザの今の状態を引っ張ってきたいときに、

SELECT state FROM Users WHERE id = @uid;

とかってやると、見つからなかった場合に空行が返ってくる。
これがいやな場合はこうする*1

SELECT state FROM Users WHERE id = @uid
UNION ALL
-- 見つからなかった場合、stateとして-1を返す
SELECT -1 WHERE NOT EXISTS(SELECT * FROM Users WHERE id = @uid);

これで、元のSQLで見つかった場合は空行がUNION ALLされ、見つからなかった場合は空行に-1がUNION ALLされるから、絶対に空行を返さない。
元のSQLでidがPKなら、常に1行返ってくることが保証されるから、ホスト言語側で場合分けをする必要がなくなる。

*1:SQL Serverでしか試してない