3 votes

Vérifier le nombre de requêtes après l'utilisation de la limite SQL

Je suis novice en matière de SQL.

J'ai une requête comme

select * from mytable order by 1 desc limit 2

Si ma table ne contient qu'une seule ligne, cette requête renverra cette ligne. Comment puis-je m'assurer que ma requête renvoie toujours 2 résultats et que si ma table n'a qu'une ligne, elle renvoie NULL ?

C'est ma première question, désolé pour mon anglais.

3voto

Tim Biegeleisen Points 53335

Vous pouvez essayer d'utiliser une astuce syndicale :

SELECT col1, col2, col3
FROM
(
    SELECT col1, col2, col3, 1 AS priority FROM mytable
    UNION ALL
    SELECT NULL, NULL, NULL, 2
    UNION ALL
    SELECT NULL, NULL, NULL, 2
) t
ORDER BY
    priority,
    col1
LIMIT 2;

La stratégie ci-dessus consiste à inclure deux enregistrements "vides" par le biais de l'union. Toutefois, ces enregistrements vides n'apparaîtront jamais dans l'ensemble de résultats que si votre table contient moins de 2 enregistrements.

1voto

Gordon Linoff Points 213350

Si vous avez un grand nombre de colonnes et que vous ne voulez pas les énumérer, vous pouvez utiliser cette variante de la réponse de Tim :

select t.*
from mytable t
union all
select t.*
from (select 1 as n union all select 2 as n) left join
     mytable t
     on 1 = 0;  -- always false
order by col1 desc
limit 2;

Le tri par ordre décroissant place les données non NULL en premier lieu. Cela suppose que col1 n'est pas NULL -- Les lignes valides sont donc les premières.

Notas:

  • Il est ainsi facile d'ajouter des lignes supplémentaires (il suffit de modifier la sous-requête).
  • Il est ainsi facile de gérer des colonnes supplémentaires, qui sont insérées automatiquement.
  • Aucune sous-requête n'est nécessaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X