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.
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.
Cela devrait fonctionner sur la plupart des bases de données, testées sur Postgres et Netezza:
SELECT NULL LIMIT 0;
T-SQL (MSSQL):
SELECT Top 0 1;
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.
Cela fonctionnera probablement sur toutes les bases de données.
SELECT * FROM (SELECT NULL AS col0) AS inner0 WHERE col0 IS NOT NULL;
SELECT TOP 0 * FROM [dbo].[TableName]
Il s'agit d'une approche raisonnable de l'opérateur à balayage constant.
SELECT NULL WHERE FALSE;
cela fonctionne dans postgresql, mysql, sous-requête dans mysql.
Que dis-tu de ça?
SELECT 'MyName' AS EmptyColumn
FROM dual
WHERE 'Me' = 'Funny'
SELECT * FROM (SELECT NULL) WHERE 0
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.