Considérez cette instruction select:
SELECT *,
1 AS query_id
FROM players
WHERE username='foobar';
Il renvoie la colonne query_id
avec la valeur 1
ainsi que les autres colonnes d'un joueur.
Comment peut -on faire le retour SQL ci - dessus au moins query_id
de 1
même si les trouvailles sélectionnez aucune ligne que match?
BTW, c'est PostgreSQL 8.4.
postgresql
select
null
Nathanael Weiss
la source
la source
order by
. Le second "crée" une table virtuelle avec exactement une ligne et une colonne et fait une jointure externe (sans aucune condition de jointure "réelle"), ainsi vous récupérez toujours au moins cette ligne. L'utilisationselect *
dans le code de production est un mauvais style. Ne le fais pas. Énumérez toujours les colonnes dont vous avez besoin.select *
devrait uniquement être utilisée dans des requêtes ad hoc.left join
n'est pas lisible?UNION ALL
peut parfois être plus efficace queUNION
, car vous dites explicitement au planificateur de requête que vous vous attendez à ce qu'il n'y ait pas de lignes en double sortant desUNION
requêtes ed ou si vous voulez qu'ils soient sortis. Sans leALL
modificateur, il suppose que vous souhaitez supprimer les doublons (un seul de chaque retourné), tout comme avec leDISTINCT
mot - clé, et garantir qu'il peut avoir besoin de recourir + de ré-analyser les résultats une fois de plus. Utilisez doncALL
avecUNION
sauf si vous avez spécifiquement besoin d'une déduplication des lignes de sortie.Si vous ne vous attendez qu'à une ou zéro ligne, cela fonctionnera également:
Cela retournera une ligne avec toutes les valeurs ayant null sauf query_id si aucune ligne n'est trouvée.
la source
username = 'foobar'
Sonner de manière tardive ici, mais voici une syntaxe qui fonctionne (au moins dans 9.2, je n'ai pas essayé les versions antérieures).
Renvoie uniquement la ligne "vide" si le contenu entier de "a" est nul.
Prendre plaisir. / bithead
la source
la source