57

MySQLでCASEステートメントを使用してストアドプロシージャを使用しています。

CASEのELSE句(デフォルトと同等)で、空の結果セットを選択して返したいので、ELSEケースを処理しないことでSQLエラーをスローせず、代わりに通常のクエリのように空の結果セットを返します。行を返さなかったでしょう。

これまでのところ、次のようなものを使用してこれを行うことができました。
Select NULL From users Where False

ただし、この例の「users」のように、既存のテーブルに名前を付ける必要があります。それは機能しますが、最終的に使用されるテーブル名の名前が変更されたり削除されたりしても壊れない方法をお勧めします。

試しましSelect NULL Where Falseたが、うまくいきません。

を使用Select NULLすると、空のセットは返されませんが、NULLという名前の列とNULL値を持つ1つの行が返されます。

4

10 に答える 10

49

MySQL には「デュアル」と呼ばれるダミー テーブルがあり、これを使用できるはずです。

select
    1
from
    dual
where
    false

これにより、常に空の結果が得られます。

于 2009-09-21T18:46:22.667 に答える
14

T-SQL (MSSQL):

SELECT Top 0 1;
于 2014-02-16T13:53:54.053 に答える
7

どうですか

 SELECT * FROM (SELECT 1) AS TBL WHERE 2=3

myphp にチェックインし、sqlite や他のデータベース エンジンでも動作します。

于 2010-06-01T12:02:45.493 に答える
4

これはおそらくすべてのデータベースで機能します。

SELECT * FROM (SELECT NULL AS col0) AS inner0 WHERE col0 IS NOT NULL;
于 2012-08-02T17:59:18.123 に答える
3
SELECT TOP 0 * FROM [dbo].[TableName]

これは、定数スキャン演算子への合理的なアプローチです。

于 2015-06-19T06:07:16.310 に答える
3
SELECT NULL WHERE FALSE;

postgresql、mysql、mysqlのサブクエリで動作します。

于 2018-05-22T07:21:49.647 に答える
2

これはどう?

SELECT 'MyName' AS EmptyColumn
FROM dual
WHERE 'Me' = 'Funny'
于 2009-09-21T18:57:22.393 に答える
1
SELECT * FROM (SELECT NULL) WHERE 0
于 2012-08-21T23:59:51.947 に答える
0

PostgreSQL では単純な

SELECT;

動作します。「不明」というラベルの付いた列も表示されません。
ただし、まだ1 行が取得されたと表示されていることに注意してください。

于 2015-12-22T21:33:10.687 に答える