私は、CASEステートメントを使用して、MySQLのストアドプロシージャを使用しています。
CASEのELSE節(デフォルトと同等:)空の結果セットを選択して返します。したがって、ELSEケースを処理せずにSQLエラーをスローし、代わりに通常のクエリのように空の結果セットを返します。行は返されませんでした。
これまでのところ、私は次のようなものを使用してそうすることができました:Select NULL From users Where False
ただし、この例の「ユーザー」のように、既存のテーブルに名前を付ける必要があります。それは機能しますが、最終的に使用されるテーブル名が名前変更または削除されても壊れない、よりエレガントな方法を好むでしょう。
Select NULL Where False
を試しましたが、動作しません。
Select NULL
を使用しても空のセットは返されませんが、NULLという名前の列とNULL値を持つ1つの行が返されます。
MySQLには「デュアル」と呼ばれるダミーテーブルがあり、これを使用できるはずです。
select
1
from
dual
where
false
これにより、常に空の結果が得られます。
これは、PostgresとNetezzaでテストされたほとんどのDBで動作するはずです。
SELECT NULL LIMIT 0;
T-SQL(MSSQL):
SELECT Top 0 1;
どう?
SELECT * FROM (SELECT 1) AS TBL WHERE 2=3
Myphpでチェックされ、sqliteおよびおそらく他のdbエンジンでも動作します。
これはおそらくすべてのデータベースで機能します。
SELECT * FROM (SELECT NULL AS col0) AS inner0 WHERE col0 IS NOT NULL;
SELECT TOP 0 * FROM [dbo].[TableName]
これは、一定のスキャン演算子に対する合理的なアプローチです。
SELECT NULL WHERE FALSE;
postgresql、mysql、mysqlのサブクエリで動作します。
これはどう?
SELECT 'MyName' AS EmptyColumn
FROM dual
WHERE 'Me' = 'Funny'
SELECT * FROM (SELECT NULL) WHERE 0
PostgreSQLではシンプルな
SELECT;
動作します。 「不明」とラベル付けされた列も取得しません。
ただし、まだ1行が取得されています。