web-dev-qa-db-ja.com

空の結果セットを選択する方法は?

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

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

これまでのところ、私は次のようなものを使用してそうすることができました:
Select NULL From users Where False

ただし、この例の「ユーザー」のように、既存のテーブルに名前を付ける必要があります。それは機能しますが、最終的に使用されるテーブル名が名前変更または削除されても壊れない、よりエレガントな方法を好むでしょう。

Select NULL Where Falseを試しましたが、動作しません。

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

45
Petruza

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

select
    1
from
    dual
where
    false

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

40
Björn

これは、PostgresとNetezzaでテストされたほとんどのDBで動作するはずです。

SELECT NULL LIMIT 0;
19
Aleh

T-SQL(MSSQL):

SELECT Top 0 1;
8

どう?

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

Myphpでチェックされ、sqliteおよびおそらく他のdbエンジンでも動作します。

7
Maksee

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

SELECT * FROM (SELECT NULL AS col0) AS inner0 WHERE col0 IS NOT NULL;
3
dhruvbird
SELECT TOP 0 * FROM [dbo].[TableName]

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

3
Nilesh
SELECT NULL WHERE FALSE;

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

2
Tim

これはどう?

SELECT 'MyName' AS EmptyColumn
FROM dual
WHERE 'Me' = 'Funny'
2
Raj More
SELECT * FROM (SELECT NULL) WHERE 0
1
aasfalcon

PostgreSQLではシンプルな

SELECT;

動作します。 「不明」とラベル付けされた列も取得しません。
ただし、まだ1行が取得されています。

0
luckydonald