Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

comment faire select exists(...) ?

4 réponses
Avatar
Etienne
Bonjour,

Cette requête retourne de bons résultats :
select
Name,
HasFile = (select cast(count(FileID) as bit) from Files where FolderID =
F.FolderID)
from Folders F

mais la sous-requête peut sans doute s'écrire plus efficacemement du style :
select exists FileID from Files where FolderID = F.FolderID

Avez vous une syntaxe qui fonctionne svp ?

Merci, Etienne.

4 réponses

Avatar
Gilles LE BARBIER
J'ai pas tester mais je l'écrirerais comme ça

select F1.Name, ISNULL(count(F2.fileID),0)
from Folders F1
left outer joint Files F2 ON where F2.FolderID = F1.FolderID
GROUP BY Name

A+
Gilles
Avatar
Gilles LE BARBIER
> mais la sous-requête peut sans doute s'écrire plus efficacemement du style
:
select exists FileID from Files where FolderID = F.FolderID



Si tu prend la même requete avec un JOIN a la place du LEFT OUTER JOIN
retire le count
et tu as tous les folders qui contienent au moins un fichier !!!
Avatar
Etienne
J'ai fais ça et les performances sont meilleurs qu'avec le count :

select
Name,
HasFile = cast(select isnull(select top 1 FileID from Files where
FolderID=F.FolderID, 0) as bit)
from Folders F

PS : bien sûr, il ne faut pas avoir une FileID avec une valeur égale à 0 ...

"Gilles LE BARBIER" a écrit :


> mais la sous-requête peut sans doute s'écrire plus efficacemement du style
> :
> select exists FileID from Files where FolderID = F.FolderID

Si tu prend la même requete avec un JOIN a la place du LEFT OUTER JOIN
retire le count
et tu as tous les folders qui contienent au moins un fichier !!!




Avatar
Gilles LE BARBIER
> select
Name,
HasFile = cast(select isnull(select top 1 FileID from Files where
FolderID=F.FolderID, 0) as bit)
from Folders F




si je comprend bien !
Tu veux les folders avec son premier ID file sinon l'id est à 0 !!
C'est ça ?

PS : bien sûr, il ne faut pas avoir une FileID avec une valeur égale à 0
...




une valeur à 0 sacrilège :-) tes tablessont pas liés ?