source

다중 부품 식별자를 바인딩할 수 없습니다.

ittop 2023. 4. 7. 21:54
반응형

다중 부품 식별자를 바인딩할 수 없습니다.

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;

암묵적인 조인과 명시적인 조인을 혼합하고 있습니다.그것은 허용되지만, 당신은 그것을 제대로 하는 방법을 알아야 합니다.

조인(명시적 조인, 즉 명시적 조인( 조인, 즉 명시적 조인, 즉 명시적 조인, 즉 명시적 조인, 즉 명시적 조인, 즉 명시적 조인, 즉 명시적 조인, 즉 명시적 조인, 즉 명시적 조인, 즉 명시적 조인, 즉 명시적 이라고 할 수 있습니다.JOIN이 '조인'으로보다 됩니다.보다 우선합니다.이치노WHERE(신호)

다음은 질문의 개요입니다.

SELECT
  …
FROM a, b LEFT JOIN dkcd ON …
WHERE …

다음과 같이 동작할 것으로 예상됩니다.

SELECT
  …
FROM (a, b) LEFT JOIN dkcd ON …
WHERE …

표의 , 즉 ㄴ, 이, 이, 이, 합, 입, 입, 입, 입, 입, 입의 조합입니다.a ★★★★★★★★★★★★★★★★★」b되어 있습니다.dkcd 지금 일은

SELECT
  …
FROM a, (b LEFT JOIN dkcd ON …)
WHERE …

이미 , ,, 미, 미, 하, 하, that, that, that, that, that, that, that, that that,dkcd 에 반대하여 결합되어 있다b ''만''b그 후 결합 결과는 다음과 같이 결합됩니다.a 더 을 합니다.WHERE절을 클릭합니다. 「 」, 「 」에 대한 .a ONa그 시점에서는 알 수 없습니다.그래서 에러 메세지가 표시됩니다.

제가 고객이라면 이 쿼리를 다시 쓰려고 할 것입니다.한 가지 가능한 해결책은 다음과 같습니다.

SELECT DISTINCT
  a.maxa,
  b.mahuyen,
  a.tenxa,
  b.tenhuyen,
  ISNULL(dkcd.tong, 0) AS tongdkcd
FROM phuongxa a
  INNER JOIN quanhuyen b ON LEFT(a.maxa, 2) = b.mahuyen
  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'
ORDER BY a.maxa

테이블이 있습니다.a ★★★★★★★★★★★★★★★★★」b되고 그 됩니다.dkcd이것은 의 쿼리와 중 구문을 은 참조문헌입니다.★★★★a.maxa dkcd의 가입조건이 완전히 유효하게 되었습니다.

@지적했듯이, 당신은 아마도 @Aaron Bertrand의 자격을 할 입니다.maxa 에일리어스 「」, 「」)가 있는 경우.a , 의ORDER BY절을 클릭합니다.

쿼리에서 스키마(dbo)를 잘못된 방식으로 사용할 경우 이 오류가 발생할 수 있습니다.

예를 들어 다음과 같이 입력합니다.

select dbo.prd.name
from dbo.product prd

에러가 납니다.

이 경우는, 다음과 같이 변경합니다.

select prd.name
from dbo.product prd

별칭 이름을 지정한 경우 실제 이름으로 변경

예를들면

SELECT  
    A.name,A.date
  FROM [LoginInfo].[dbo].[TableA] as A
   join 
  [LoginInfo].[dbo].[TableA] as B 
  on  [LoginInfo].[dbo].[TableA].name=[LoginInfo].[dbo].[TableB].name;

그것을 로 변경하다

SELECT  
    A.name,A.date
  FROM [LoginInfo].[dbo].[TableA] as A
   join 
  [LoginInfo].[dbo].[TableA] as B 
  on  A.name=B.name;

SQL SERVER에서도 같은 에러 메시지에 시달리고 있었습니다.다중 가입이 있었기 때문에 가입 순서를 바꾸면 문제가 해결되었습니다.

나의 경우, 그 문제는 내가 테이블에 붙인 별칭으로 판명되었다.SQL Server에서 "oa"를 사용할 수 없는 것 같습니다.

나에게 효과가 있었던 것은 WHERE 조항을 SELECT 서브쿼리로 변경한 것입니다.

송신원:

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

수신처:

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

JDBC에서도 같은 에러가 발생하고 있었습니다.모든 것을 확인했고 내 질문은 괜찮았다.알고보니, 이 조항에서 나는 논쟁을 벌인다:

where s.some_column = ?

그리고 내가 전달한 논쟁의 가치는 무효였다.이 경우에도 같은 오류가 발생하는데, 이는 오해의 소지가 있습니다. 왜냐하면 인터넷을 검색하면 쿼리 구조에 뭔가 문제가 있지만 제 경우에는 해당되지 않기 때문입니다.누군가 같은 문제에 직면할 것 같아서

SQL은 처음이지만 수강하는 과정에서 이 문제를 발견했는데, 프로젝트에 쿼리를 할당하면 특히 멀티 파트 오류를 제거하는 데 도움이 된다는 것을 알게 되었습니다.예를 들어 제가 만든 프로젝트는 CTU SQL Project이기 때문에 USE [CTU SQL Project]를 첫 번째 행으로 하여 아래와 같이 스크립트를 시작했습니다.

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

가 「」에서,UPDATE 을 한 번 확인해 주세요.JOIN에러의 원인이 되고 있는 열/필드가 있는 테이블에 표시됩니다.

제 경우, 이것은 이 모든 것이 부족했기 때문입니다.JOIN(Andriy가 지적한 바와 같이) 알 수 없는 필드로 인해 동일한 오류가 발생하였습니다.

대신 이렇게 테이블을 접합해보세요.

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

이거면 될 것 같아

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;

저의 실수는 표에 존재하지 않는 필드를 사용한 것입니다.

table1.field1 =>이 존재하지 않습니다.

표2.field1 => 이 맞습니다.

테이블 이름을 수정합니다.

WITH 사용으로 인해 오류가 발생하였습니다.

WITH RCTE AS (
   SELECT...
)
SELECT RCTE.Name, ...
FROM 
  RCTE INNER JOIN Customer
  ON RCTE.CustomerID = Customer.ID 

다른 테이블과 조합하여 사용할 경우...

테이블에 앉는 걸 잊으셨나요?그렇지 않은 경우 에일리어스를 사용해야 합니다.

저도 이 오류로 인해 고민하다가 답변과 같은 전략을 하게 되었습니다.이것이 효과가 있는 전략임을 확인하기 위해 답변을 첨부합니다.

다음 예제에서는 데이터가 있는 것으로 알고 있는2개의 테이블 간에 첫 번째 내부 조인을 1회 실행하고 다음으로 빈 행이 있는 테이블에서 두 개의 왼쪽 외부 조인을 수행합니다.테이블 간에 기본 쉼표로 구분된 구문을 수행하는 대신 내부 조인과 외부 조인을 혼합하여 테이블 간의 데이터 액세스 결과를 얻을 수 있습니다.

use somedatabase
go 

select o.operationid, o.operatingdate, p.pasid, p.name as patientname, o.operationalunitid, f.name as operasjonsprogram,  o.theaterid as stueid, t.name as stuenavn, o.status as operasjonsstatus from operation o 
inner join patient p on o.operationid = p.operationid 
left outer join freshorganizationalunit f on f.freshorganizationalunitid = o.operationalunitid
left outer join theater t on t.theaterid = o.theaterid
where (p.Name like '%Male[0-9]%' or p.Name like '%KFemale [0-9]%')

첫 번째: 데이터 조회가 예상되는 테이블 간의 내부 조인을 수행합니다.두 번째 부분: 외부 조인을 계속하여 다른 테이블 내의 데이터를 가져오지만 테이블 외부 조인에 대응하는 데이터가 없는 경우 또는 에서 설정한 조건과 일치하는 경우 결과 세트가 필터링되지 않습니다.

이 오류는 콤마를 놓치는 것만으로 발생할 수도 있습니다.,SELECT 문의 열 이름 사이에 있습니다.

예:

SELECT MyCol1, MyCol2 MyCol3 FROM SomeTable;

나에게 문제는 빈 괄호 없이 DB 함수를 호출하는 어리석음이었다.select [apo].[GenerateNationalIdFrance]대신select [apo].[GenerateNationalIdFrance]()...그것을 깨닫는 데 몇분이 걸렸지만, 후배들에게 언급할 가치가 있다:-)

나는 잘못된 에일리어스 철자를 사용하고 있었는데, 정확한 철자를 입력한 후에 작동했다.

언급URL : https://stackoverflow.com/questions/7314134/the-multi-part-identifier-could-not-be-bound

반응형