Comment sélectionner un jeu de résultats vide?
Je suis à l'aide d'une procédure stockée dans le serveur MySQL, avec une instruction case.
Dans la clause ELSE de l'AFFAIRE ( l'équivalent de défaut: ) je veux choisir et retourne un jeu de résultats vide, évitant ainsi de jeter une erreur SQL par ne gère pas le cas d'AUTRE, et, au lieu de retourner un jeu de résultats vide, comme si une requête régulière aurait renvoyé aucune ligne.
Jusqu'à présent, j'ai réussi à le faire en utilisant quelque chose comme:
Select NULL From users Where False
Mais j'ai le nom d'une table existante, comme les "utilisateurs" dans cet exemple.
Il fonctionne, mais je préfère une façon plus élégante qui ne se casse pas si finalement le nom de la table utilisée est renommé ou supprimé.
J'ai essayé Select NULL Where False
mais ça ne fonctionne pas.
À l'aide de Select NULL
ne renvoie pas un ensemble vide, mais une ligne avec une colonne nommée NULLE et avec une valeur NULLE.
- Il serait étrange de schéma, en effet, qui n'avait pas un seul tableau, vous pouvez garantir d'exister!
- Vous avez raison. Il y a beaucoup de tables qui existent, le problème est que une fois que vous choisissez une table, si dans l'avenir, que le tableau est supprimé ou renommé, le code que vous avez écrit ne fonctionne plus, et vous serait le couplage de deux morceaux de logiciels qui n'ont rien à voir les uns avec les autres et pourtant, un changement dans l'un fait l'autre en arrêt de travail. C'est le couplage et d'attelage dans le logiciel est généralement une mauvaise idée.
- Retour dans les jours, lorsque je l'ai utilisé Access/Jet, mon schéma de comprendre un permanent de la table auxiliaire pour cet effet nommé "RowRowTable'.
Vous devez vous connecter pour publier un commentaire.
Il y a un mannequin de table dans MySQL appelé "double", qui vous devriez être en mesure d'utiliser.
Cela vous donnera toujours un résultat vide.
dual
est né à cette fin.select 1 in (SELECT 1 FROM dual WHERE FALSE);
retourne 1. Seule solution proposée par @dhruvbird a fonctionné pour moiCela devrait fonctionner sur la plupart des DBs, testé sur Postgres et Netezza:
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
(v5.5). Si cette réponse n'est pas adapté à cette question.T-SQL (MSSQL):
Comment sur
Vérifié dans myphp, et il fonctionne aussi dans sqlite, et probablement dans tout autre moteur de base de données.
Cette approche est raisonnable d'opérateur constant scan.
Ce sera sans doute dans toutes les bases de données.
Comment à ce sujet?
il travaille dans postgresql ,mysql, sous-requête mysql.
SELECT NULL FROM some_table WHERE FALSE
à la place.Dans PostgreSQL, un simple
œuvres. Vous n'aurez même pas obtenir toutes les colonnes de l'étiquette "inconnu".
Notez cependant, il est dit encore 1 ligne récupérée.
select where false
?