Не удалось связать идентификатор из нескольких частей - PullRequest
174 голосов
/ 06 сентября 2011

Я видел похожие ошибки на SO, но я не нашел решения для моей проблемы. У меня есть запрос SQL, как:

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;

Когда я выполняю этот запрос, результат ошибки: Не удалось связать многокомпонентный идентификатор "a.maxa". Почему?
P / s: если я разделю запрос на 2 отдельных запроса, он будет работать нормально.

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;

и

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

Ответы [ 14 ]

1 голос
/ 28 апреля 2017
SELECT DISTINCT
        phuongxa.maxa ,
        quanhuyen.mahuyen ,
        phuongxa.tenxa ,
        quanhuyen.tenhuyen ,
        ISNULL(dkcd.tong, 0) AS tongdkcd
FROM    phuongxa ,
        quanhuyen
        LEFT OUTER JOIN ( SELECT    khaosat.maxa ,
                                    COUNT(*) AS tong
                          FROM      khaosat
                          WHERE     CONVERT(DATETIME, ngaylap, 103) BETWEEN 'Sep 1 2011'
                                                              AND
                                                              'Sep 5 2011'
                          GROUP BY  khaosat.maxa
                        ) AS dkcd ON dkcd.maxa = maxa
WHERE   phuongxa.maxa <> '99'
        AND LEFT(phuongxa.maxa, 2) = quanhuyen.mahuyen
ORDER BY maxa;
1 голос
/ 19 июня 2016

Вместо этого вы можете попробовать объединить таблицы как,

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

Это должно работать

1 голос
/ 16 мая 2016

Если эта ошибка возникает в UPDATE, дважды проверьте JOIN в таблице со столбцом / полем, которое вызывает ошибку.

В моем случае это было связано с отсутствием самого JOIN, который генерировал ту же ошибку из-за неизвестного поля (как указал Андрей ).

1 голос
/ 28 апреля 2016

Я новичок в SQL, но натолкнулся на эту проблему в ходе моего курса и обнаружил, что назначение запроса проекту помогло устранить ошибку, состоящую из нескольких частей. Например, проект, который я создал, был CTU SQL Project, поэтому я убедился, что начал свой сценарий с USE [CTU SQL Project] в качестве моей первой строки, как показано ниже.

USE [CTU SQL Project]
SELECT Advisors.First_Name, Advisors.Last_Name...and so on.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...