dans PostgreSQL, comment puis-je retourner une table contenant 0 si ma table est vide et une table contenant 1 si ma table a des rangées? P>
J'ai besoin de le faire dans SQL, sans aucune autre langue p>
7 Réponses :
Je ne pense pas que ce soit possible avec rien que SQL. Pourquoi ne pouvez-vous utiliser aucune autre langue? P>
Cela aurait été mieux comme un commentaire
Peut-être que c'est ce que vous recherchez?
select min( c ) from ( select count(*) c from mytab union select 1 from mytab having count(*) > 1 )
Utilisation:
SELECT CASE
WHEN EXISTS (SELECT * FROM foo LIMIT 1) THEN 1
ELSE 0
END
C'est tellement faux! Cette requête lit une table entière pour déterminer s'il est vide. Pour une petite table, cela prendrait des âges!
Puis-je simplement ajouter un "top 1" puis pour résoudre ce problème?
ERM, parce que ce n'est pas SQLServer, limite 1?
@Tometzky, cela ne prendrait pas d'âge. De Documentation PostgreSQL : "La sous-requête sera généralement Seulement être exécuté suffisamment loin pour déterminer si au moins une ligne est renvoyée, pas jusqu'à l'achèvement. " I> En d'autres termes, limite 1 code> est déjà intégré. Toute mise en œuvre d'existence devrait se comporter de la même manière, car il n'y a jamais de point à récupérer plus de données.
Peut-être un piratage, mais cela fonctionne.
SELECT count(*) FROM (SELECT 1 FROM table LIMIT 1) AS t;
EDIT: strong> réécrit un peu. L'utilisation antérieure de la limite était fausse (n'a rien aidé sur les grandes tables que je voulais). P> p>
edit: strong> cela ne fonctionne pas dans Postgers < / em> (8.x au moins). S'il vous plaît voir les commentaires et ici: http: // postgretsql.1045698.n5.nfabababebobil.com/window-function-count-and-limit-td3233588.html P> Happy SQL'ing. P> P> Sélectionnez, comptez et limite doit le faire. del>
Cela limitera simplement le nombre de lignes retournées à 1, il retournera toujours «3» s'il y a 3 rangées.
Essayez:
select sign(count(*)) from mytable
Count (*) est très lent pour les énormes tables
Vous pouvez mettre cette demande dans une procédure stockée, avec le nom de la table en tant que paramètre: puis exécutez cette fonction comme ceci: p> Vous pouvez donc l'appeler avec n'importe quel nom de votre table p> p>
Voulez-vous retourner la valeur i> 0 ou 1 si votre table a des rangées? Ou voulez-vous retourner une table contenant une seule rangée si elle a des rangées, et rien si ce n'est pas le cas?
Je veux retourner une table contenant la valeur 1 s'il y a des rangées dans ma table et une table contenant 0 si rien n'est dans ce tableau spécifique que j'ai.
Est-il absolument nécessaire de retourner un 0 ou 1? Si vous voulez juste un indicateur booléen, toute valeur supérieure à 0 pour être true dans votre logique post-db.