Bonjour,
Je vous explique mon problème, souvent lorsque je fais une requête et qu'elle est simple, je ne descend pas dans les niveaux inférieurs en utilisant des selects imbriqués, mais lorsque je n'ai pas le choix, je me retrouve souvent "bloqué" avec "...column prefix '...' does not match with a table name or alias..."
Je suppose que c'est un problème de compréhension du SQL car si on ne peut pas faire autrement, le sql ne serait pas très pratique comme langage...![]()
Je vous montre un exemple:
J'ai simplifié le code pour une meilleure compréhension du problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 ... INNER JOIN (SELECT Client_ID,Sexe,Nom,Prenom FROM tClient)tClient ON tClient.Client_ID = tDossier.Client_ID LEFT JOIN tClient_Adresse ON tClient.Client_ID = tClient_Adresse.Client_ID ,(SELECT TOP 1 * FROM (SELECT Adresse_ID FROM dbo.tClient_Adresse WHERE dbo.tClient_Adresse.Client_ID=tClient.Client_ID) tC_A INNER JOIN tAdresse ON tAdresse.Adresse_ID = tC_A.Adresse_ID2 ORDER BY tAdresse.Principal)t2
Ici en fait j'ai un client, une ou plusieurs adresses pour le client (ce qui explique la table de liaison tClient_Adresse), et je veux récupérer une seule de ces adresses, celle qui est définie en tant que principale.
Mon problème est que tClient.Client_ID n'est pas visible à l'intérieur des selects imbriqués... bref j'ai l'impression que dès qu'on "descend" d'un niveau on n'a plus accès aux autres tables, c'est peut être normal mais alors comment fais ton pour reprendre des valeurs des colonnes qui sont plus "hautes" (comme Client_ID de la tClient_ID par exemple) ?
J'ai l'impression que je n'ai pas compris des choses parce que ce genre de problème me revient souvent... alors ce que je fais la plupart du temps c'est que j'essaye d'éviter ce genre de cas complexe, en faisant (quand c'est possible, quand il n'y a qu'une valeur à récupérer sur un enregistrement d'un fichier) des appels du genre dbo.mafonction(Client_ID) qui me retournerait l'adresse (numéro civique)... mais ce genre de principe est mauvais car dès que je veux plus d'une "case" (par exemple le numéro civique + le code postal + la ville), c'est pas possible avec les appels de fonctions qui ne renvoient basiquement qu'une valeur...
J'espère que vous comprenez mon problème, je vous remercie à l'avance de l'aide que vous pourrez me donner.
Merci.
Partager