2013-08-02 3 views

답변

7

하면 DBMS, 다음 중 하나 이상에 따라 작동합니다 :

  • SELECT NULL LIMIT 0 (PostgreSQL을와 MySQL 구문)/SELECT TOP 0 1 (MS SQL Server 구문)
  • SELECT NULL WHERE FALSE (부울 유형이있는 DBMS, 예 : PostgreSQL) SELECT NULL WHERE 1=0 (대부분 당신은 어떤 종류의 FROM 절없이 SELECT이없는 수의 DBMS) Oracle의

,이 양식 SELECT NULL FROM DUAL의 수, 나는 생각이 필요합니다; 어느 버전의 LIMIT/TOPWHERE을 수락할지 확실하지 않습니다.

-- 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; 
: 그들은 더 값이 포함 없어도

더 정교한 옵션은 (임시) 테이블을 만들고 당신에게 유형이 관련된 것이다 컬럼의 수를 줄 수있는 그것에 행을 삽입하지 않는 것입니다

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

DBMS의 설정을 돌려주는 경우를 functi을 또 다른 가능성은 : PostgreSQL의에서

, 당신은 심지어 당신이 결과가 제로 행과 열을 0으로로 설정 한 수, 아니 열이있는 테이블을 만들 수 있습니다 빈 세트를 반환 할 수 있습니다. 예를 들어, 다시 PostgreSQL의에서 그것이 내가 가장 잘 알고 무엇을, 당신이 generate_series()에 잘못된 범위를 제공 할 수 있습니다 :

SELECT * FROM generate_series(0,-1); 
2
select * 
from atable 
where 1=2 
4

:

SELECT 1 LIMIT 0 
2

경우 항상 불가능 뭔가 동일시합니다 값.

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

등 등

1

이 다양한 답변 : 그러나


SELECT 1 LIMIT 0 
SELECT 1 FROM DUAL WHERE 1=0 
,주의하시기 바랍니다 행의 수는 0이 아닌 열 수있는 경우에도. 예를 들어

: 당신이 할 수있는 PostgreSQL의에서

INSERT INTO t(a,b) SELECT 1,1 LIMIT 0; 
0

을 :

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

당신은 쓸 필요가 expression 부울이 있어야한다 on()에 있기 때문에이 작동

select 
    * 
from 
    table 
    join another_table on (false) 

.false을 사용하면 조인은 결코 true 일 수 없습니다.

관련 문제