Schéma:L'identifiant plusieurs parties ne pouvait pas être lié - sous-requête
create table TableA (A1 int)
create table TableB (B1 int, B2 int)
create table TableC (C1 int)
requête Problématiques:
SELECT *
FROM TableA a
INNER JOIN TableB b ON b.B1=a.A1
INNER JOIN (SELECT TOP 1 *
FROM TableC c
WHERE c.C1=b.B1 ORDER BY c.C1) d ON d.C2=b.B2
INNER JOIN OtherTable ON OtherTable.Foo=d.C1
La construction de ce schéma et d'exécuter la requête dans SQLFiddle sous SQL Server 2008 les résultats dans:
The multi-part identifier "b.B1" could not be bound.: SELECT * FROM TableA a INNER JOIN TableB b ON b.B1=a.A1 INNER JOIN (SELECT TOP 1 * FROM TableC c WHERE c.C1=b.B1 ORDER BY c.C1) d ON d.C2=b.B2
en utilisant au lieu de CROSS APPLIQUER INNER JOIN pour les corrections de sous-requête l'issue
Quel est le problème? Edit: J'ai ajouté "TOP 1" qui faisait partie de la requête réelle et c'est une partie pertinente du problème.
Édition2: Informations supplémentaires sur le problème.
OK. Regardez votre sous-requête. Vous filtrez par C1 puis ORDER BY C1. Quel est le sens? Je pense que vous devez «ORDER BY» C2. –
Ceci est une abstraction de la vraie requête –
Mais vous déformez la logique. Voir ma réponse mise à jour. –