237 votes

L'identifiant en plusieurs parties n'a pas pu être lié

J'ai vu des erreurs similaires sur SO, mais je ne trouve pas de solution à mon problème. J'ai une requête SQL comme :

SELECT DISTINCT
        a.maxa ,
        b.mahuyen ,
        a.tenxa ,
        b.tenhuyen ,
        ISNULL(dkcd.tong, 0) AS tongdkcd
FROM    phuongxa a ,
        quanhuyen b
        LEFT OUTER JOIN ( SELECT    maxa ,
                                    COUNT(*) AS tong
                          FROM      khaosat
                          WHERE     CONVERT(DATETIME, ngaylap, 103) BETWEEN 'Sep 1 2011'
                                                              AND
                                                              'Sep 5 2011'
                          GROUP BY  maxa
                        ) AS dkcd ON dkcd.maxa = a.maxa
WHERE   a.maxa <> '99'
        AND LEFT(a.maxa, 2) = b.mahuyen
ORDER BY maxa;

Lorsque j'exécute cette requête, le résultat de l'erreur est : L'identifiant en plusieurs parties "a.maxa" n'a pas pu être lié. Pourquoi ?
P/s : si je divise la requête en 2 requêtes individuelles, cela fonctionne bien.

SELECT DISTINCT
        a.maxa ,
        b.mahuyen ,
        a.tenxa ,
        b.tenhuyen
FROM    phuongxa a ,
        quanhuyen b
WHERE   a.maxa <> '99'
        AND LEFT(a.maxa, 2) = b.mahuyen
ORDER BY maxa;

y

SELECT  maxa ,
        COUNT(*) AS tong
FROM    khaosat
WHERE   CONVERT(DATETIME, ngaylap, 103) BETWEEN 'Sep 1 2011'
                                        AND     'Sep 5 2011'
GROUP BY maxa;

0 votes

Est-ce que le phuongxa le tableau comprend une colonne maxa ?

1 votes

Que se passe-t-il si vous ajoutez le groupe par maxa, tong -- juste après le 5 septembre 2011.

0 votes

Oui, c'est le cas. Si je divise la requête en deux sous-requêtes, elle fonctionne bien.

5voto

SauerTrout Points 30

Ce qui a fonctionné pour moi, c'est de transformer ma clause WHERE en une sous-requête SELECT.

DE :

    DELETE FROM CommentTag WHERE [dbo].CommentTag.NoteId = [dbo].FetchedTagTransferData.IssueId

À :

    DELETE FROM CommentTag WHERE [dbo].CommentTag.NoteId = (SELECT NoteId FROM FetchedTagTransferData)

2voto

xbmono Points 472

J'avais la même erreur à partir de JDBC. J'ai tout vérifié et ma requête était correcte. Il s'avère que dans la clause where, j'ai un argument :

where s.some_column = ?

Et la valeur de l'argument que je passais était nulle. Cela donne également la même erreur, ce qui est trompeur car lorsque vous cherchez sur Internet, vous trouvez que quelque chose ne va pas dans la structure de la requête, mais ce n'est pas le cas pour moi. J'ai pensé que quelqu'un pourrait être confronté au même problème.

1voto

Bogartz Points 11

Je suis novice en SQL, mais j'ai rencontré ce problème dans le cadre d'un cours que je suivais et j'ai découvert que le fait d'attribuer la requête au projet spécifique permettait d'éliminer l'erreur en plusieurs parties. Par exemple, le projet que j'ai créé était CTU SQL Project. Je me suis donc assuré de commencer mon script avec USE [CTU SQL Project] comme première ligne, comme ci-dessous.

USE [CTU SQL Project]
SELECT Advisors.First_Name, Advisors.Last_Name...and so on.

1voto

CPHPython Points 2219

Si cette erreur se produit dans une UPDATE , vérifiez à nouveau le JOIN sur la table avec la colonne/le champ qui cause l'erreur.

Dans mon cas, cela était dû à l'absence de l'option JOIN lui-même, qui a généré la même erreur due à un champ inconnu (comme Andriy a souligné ).

1voto

Suman Kumar Points 21

Au lieu de cela, vous pouvez essayer de joindre des tables comme,

select 
  .... 
from 
   dkcd 
     right join 
                a
                  , b

Cela devrait fonctionner

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X