J'ai une requête suivante (simplifiée):SQL Server: équivalent logique de ALL requête
SELECT
Id
FROM
dbo.Entity
WHERE
1 = ALL (
SELECT
CASE
WHEN {Condition} THEN 1
ELSE 0
END
FROM
dbo.Related
INNER JOIN dbo.Entity AS TargetEntity ON
TargetEntity.Id = Related.TargetId
WHERE
Related.SourceId = Entity.Id
)
où {Condition}
est une condition dynamique complexe sur TargetEntity
. En termes simples, cette requête doit renvoyer des entités pour lesquelles toutes les entités associées correspondent à la condition requise.
Malheureusement, cela ne fonctionne pas très bien, puisque par la norme SQL 1 = ALL
est évalué à TRUE
lorsque ALL
est appliqué à un ensemble vide. Je sais que je peux ajouter AND EXISTS
, mais cela exigera que je répète toute la sous-requête, ce qui, j'en suis certain, posera des problèmes de performance.
Comment réécrire la requête pour obtenir le résultat dont j'ai besoin (SQL Server 2008)?
Merci d'avance.
Remarque: en pratique, toute requête est très dynamique, donc la solution idéale serait de réécrire seulement 1 = ALL (...)
, depuis le changement de haut niveau de sélection peut causer des problèmes lorsque les conditions supplémentaires sont ajoutées à haut niveau où.
Ça a l'air génial, je vais essayer ça maintenant. –
Fonctionne très bien, merci. –