4

MySQL/PostgreSQL/Oracle 固有のソリューションがあれば、それらすべてに興味があります。

4

6 に答える 6

8

DBMS に応じて、次の 1 つ以上が機能します。

  • SELECT NULL LIMIT 0(PostgreSQL および MySQL の構文) / SELECT TOP 0 1(MS SQL Server の構文)
  • SELECT NULL WHERE FALSE(PostgreSQL などのブール型の DBMS) SELECT NULL WHERE 1=0(ほとんどの DBMS)

オラクルの場合、これらは の形式である必要があるとSELECT NULL FROM DUAL私は信じています。/のどのバージョンが受け入れられるかわかりません。SELECTFROMLIMITTOPWHERE

より複雑なオプションは、(一時) テーブルを作成し、そこに行を挿入しないことです。これにより、任意の数の列が得られ、値が含まれていなくても型が関連付けられます。

-- PostgreSQL
CREATE TEMP TABLE dummy ( a Int, b VarChar(42) );
SELECT * FROM dummy;

-- MS SQL Server
CREATE TABLE #DUMMY ( a Int, b VarChar(42) );
SELECT * FROM #DUMMY;

PostgreSQL では、列のないテーブルを作成することもできます。これにより、行と列がゼロの結果セットを作成できます。

CREATE TEMP TABLE empty ();
SELECT * FROM empty;

別の可能性として、DBMS にセットを返す関数がある場合、空のセットを返すことができる可能性があります。たとえば、私がよく知っている PostgreSQL では、次のように無効な範囲を指定できますgenerate_series()

SELECT * FROM generate_series(0,-1);
于 2013-08-02T16:40:22.860 に答える
4

少なくとも MySQL/PostgreSQL では:

SELECT 1 LIMIT 0
于 2013-08-02T16:33:47.087 に答える
2

常に不可能なことと同等の where 値。

Where 1 = 0
Where 'a' = 'b'

などなど

于 2013-08-02T16:47:00.343 に答える
2
select *
from atable
where 1=2
于 2013-08-02T16:31:45.117 に答える
1

さまざまな答えがあります:

SELECT 1 LIMIT 0
SELECT 1 FROM DUAL WHERE 1=0

ただし、行数が 0 であっても、列数は ではないことに注意してください

例えば:

INSERT INTO t(a,b) SELECT 1 LIMIT 0;
!! Error: Column count doesn't match value count at row 1

あなたは書く必要があります:

INSERT INTO t(a,b) SELECT 1,1 LIMIT 0;
于 2013-08-02T16:47:41.923 に答える
0

PostgreSQL では次のことができます。

select
  * 
from
  table 
  join another_table on (false)

ブール式on()が必要なため、これは機能します。結合すると、決してすることはできません。falsetrue

于 2013-08-02T19:22:35.613 に答える