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
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
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 !!!
> 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 !!!
> 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 !!!
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 !!!
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 !!!
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 !!!
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 ?
> 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 ?