Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Existe uma consulta SQL que sempre retornará zero resultados?


Dependendo do DBMS, um ou mais dos seguintes funcionarão:
  • SELECT NULL LIMIT 0 (Sintaxe PostgreSQL e MySQL) / SELECT TOP 0 1 (Sintaxe do MS SQL Server)
  • SELECT NULL WHERE FALSE (DBMS com um tipo booleano, por exemplo, PostgreSQL) SELECT NULL WHERE 1=0 (a maioria dos SGBDs)

Para Oracle, eles precisam estar no formato SELECT NULL FROM DUAL , acredito, pois você não pode ter SELECT sem um FROM cláusula de algum tipo; não tenho certeza de quais versões do LIMIT / TOP e WHERE ele vai aceitar.

Uma opção mais elaborada é criar uma tabela (temporária) e não inserir nenhuma linha nela, o que pode fornecer qualquer número de colunas, que terão tipos associados mesmo que não contenham valores:
-- 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;

No PostgreSQL, você pode até criar uma tabela sem colunas, permitindo que você tenha um conjunto de resultados com zero linhas e zero colunas :
CREATE TEMP TABLE empty ();
SELECT * FROM empty;

Outra possibilidade é que, se o SGBD tiver funções de retorno de conjunto, elas poderão retornar um conjunto vazio. Por exemplo, novamente no PostgreSQL, pois é o que eu conheço melhor, você pode fornecer um intervalo inválido para generate_series() :
SELECT * FROM generate_series(0,-1);