web-dev-qa-db-fra.com

Comment sélectionner un jeu de résultats vide?

J'utilise une procédure stockée dans MySQL, avec une instruction CASE.

Dans la clause ELSE du CASE (équivalent à default:), je veux sélectionner et retourner un jeu de résultats vide, évitant ainsi de générer une erreur SQL en ne gérant pas le cas ELSE, et à la place retourner un jeu de résultats vide comme si une requête régulière n'aurait retourné aucune ligne.

Jusqu'à présent, j'ai réussi à le faire en utilisant quelque chose comme:
Select NULL From users Where False

Mais je dois nommer une table existante, comme "utilisateurs" dans cet exemple. Cela fonctionne, mais je préférerais une manière plus élégante qui ne se casse pas si finalement le nom de table utilisé est renommé ou supprimé.

J'ai essayé Select NULL Where False mais ça ne marche pas.

En utilisant Select NULL ne renvoie pas un ensemble vide, mais une ligne avec une colonne nommée NULL et avec une valeur NULL.

45
Petruza

Il y a une table factice dans MySQL appelée 'dual', que vous devriez pouvoir utiliser.

select
    1
from
    dual
where
    false

Cela vous donnera toujours un résultat vide.

40
Björn

Cela devrait fonctionner sur la plupart des bases de données, testées sur Postgres et Netezza:

SELECT NULL LIMIT 0;
19
Aleh

T-SQL (MSSQL):

SELECT Top 0 1;
8
irrelevantthesis

Que diriez-vous

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

Vérifié dans myphp, et il fonctionne également dans sqlite et probablement dans n'importe quel autre moteur db.

7
Maksee

Cela fonctionnera probablement sur toutes les bases de données.

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

Il s'agit d'une approche raisonnable de l'opérateur à balayage constant.

3
Nilesh
SELECT NULL WHERE FALSE;

cela fonctionne dans postgresql, mysql, sous-requête dans mysql.

2
Tim

Que dis-tu de ça?

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

Dans PostgreSQL, un simple

SELECT;

travaux. Vous n'obtiendrez même aucune colonne intitulée "inconnu".
Remarque cependant, il est toujours indiqué 1 ligne récupérée.

0
luckydonald