복붙노트

[SQL] 다중 부분 식별자는 바인딩 수 없습니다

SQL

다중 부분 식별자는 바인딩 수 없습니다

그래서 비슷한 오류를 본 적이 있지만 나는 내 문제에 대한 해결책을 찾을 수 없습니다. 나는 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 : 난이 개별 쿼리에 쿼리를 나눈다면, 그것은 확인을 실행합니다.

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;

해결법

  1. ==============================

    1.당신은 혼합 암시 명시 적 조인 조인된다. 그 허용,하지만 당신은 제대로 그 작업을 수행하는 방법을 알고 있어야한다.

    당신은 혼합 암시 명시 적 조인 조인된다. 그 허용,하지만 당신은 제대로 그 작업을 수행하는 방법을 알고 있어야한다.

    건은, 명시 적 (사용하여 구현하는 사람이 키워드 가입) 암시 것들보다 우선 조인되는합니다 (이 조건이 WHERE 절에 지정된 조인 곳에 '쉼표', 조인).

    다음은 쿼리의 개요는 다음과 같습니다

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

    당신은 아마 다음과 같은 행동을 기대하고 있습니다 :

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

    즉, 테이블 dkcd으로 접합 테이블 (A), (B)의 조합이다. 사실, IS를 무슨 일이야

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

    즉, 이미 알 수있는 바와 같이,이 dkcd 특히 B 및 B에 대하여 만이 결합하고 WHERE 절 상기 여과 조인 다음의 결과를 결합된다. 이 경우, ON 절에있는 모든 참조는 그 시점에서 알 수없는, 유효하지 않습니다. 오류 메시지가 표시되는 이유입니다.

    내가 당신이라면, 아마이 쿼리를 다시 작성하려고 할 것이며, 하나 개의 가능한 솔루션이 될 수 있습니다

    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 접합되어, 접합 제. dkcd 년대 참조 a.maxa는 조건이 지금 절대적으로 유효 가입 : 기본적으로,이 당신과 같은 쿼리 만 큰 차이를 만드는, 조인 중 하나에 대해 다른 구문을 사용합니다.

    @Aaron 버트 랜드가 정확하게 지적했듯이, 당신은 아마 ORDER BY 절에, 특정 별칭과 아마를 MAXA을 규정해야한다.

  2. ==============================

    2.당신이 잘못된 방식으로 쿼리에 스키마 (DBO)을 사용할 때 가끔이 오류가 발생합니다.

    당신이 잘못된 방식으로 쿼리에 스키마 (DBO)을 사용할 때 가끔이 오류가 발생합니다.

    예를 들어, 당신은 작성하는 경우 :

    select dbo.prd.name
    from dbo.product prd
    

    당신은 오류가 발생합니다.

    이 상황에서 그것을 할 수 변경 :

    select prd.name
    from dbo.product prd
    
  3. ==============================

    3.당신은 실제 이름에 그 이름을 변경 별명을 제공 한 경우

    당신은 실제 이름에 그 이름을 변경 별명을 제공 한 경우

    예를 들면

    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;
    
  4. ==============================

    4.나는 여러했기 때문에 나는 나를 위해 그것을 해결 조인의 순서를 변경, SQL Server의 동일한 오류 메시지와 함께 조인 어려움을 겪고 있었다.

    나는 여러했기 때문에 나는 나를 위해 그것을 해결 조인의 순서를 변경, SQL Server의 동일한 오류 메시지와 함께 조인 어려움을 겪고 있었다.

  5. ==============================

    5.내 경우에는 문제는 내가 테이블에 준 별명으로 밝혀졌다. "OA는"SQL 서버에 사용할 수없는 것으로 보인다.

    내 경우에는 문제는 내가 테이블에 준 별명으로 밝혀졌다. "OA는"SQL 서버에 사용할 수없는 것으로 보인다.

  6. ==============================

    6.나는 JDBC에서 동일한 오류를 가졌다. 모든 것을 확인하고 내 쿼리는 괜찮았다. 절 내가 인수를이 곳에서 밝혀졌다 :

    나는 JDBC에서 동일한 오류를 가졌다. 모든 것을 확인하고 내 쿼리는 괜찮았다. 절 내가 인수를이 곳에서 밝혀졌다 :

    where s.some_column = ?
    

    내가 전달 된 인수의 값은 null이었다. 이것은 또한 당신이 뭔가 쿼리 구조에 이상이 있음을 결국 인터넷을 검색 할 때 때문에 오해의 소지가 동일한 오류를 제공하지만 내 경우에는이 아니다. 그냥 생각 누군가가 같은 문제에 직면 할 수

  7. ==============================

    7.무엇 나를 위해 일한 것은 SELECT 하위 쿼리로 내 WHERE 절을 변경했다

    무엇 나를 위해 일한 것은 SELECT 하위 쿼리로 내 WHERE 절을 변경했다

    에서:

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

    에:

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

    8.나는 SQL에 새로운 해요,하지만 난 복용하고 구체적으로 도움이 프로젝트에 쿼리를 할당하는 것은 여러 부분 오류를 제거하는 것을 알 수 있었다 과정에서이 문제를 우연히 만났다. 예를 들어 내가 만든 프로젝트 내가 사용 [CTU SQL 프로젝트] 내 스크립트를 시작했다 확인했다 있도록 CTU SQL 프로젝트였다 아래처럼 내 첫 번째 라인으로.

    나는 SQL에 새로운 해요,하지만 난 복용하고 구체적으로 도움이 프로젝트에 쿼리를 할당하는 것은 여러 부분 오류를 제거하는 것을 알 수 있었다 과정에서이 문제를 우연히 만났다. 예를 들어 내가 만든 프로젝트 내가 사용 [CTU SQL 프로젝트] 내 스크립트를 시작했다 확인했다 있도록 CTU SQL 프로젝트였다 아래처럼 내 첫 번째 라인으로.

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

    9.이 오류는 UPDATE에서 발생하는 경우,이 오류의 원인이되는 열 / 필드가 테이블에 가입 한 번 확인합니다.

    이 오류는 UPDATE에서 발생하는 경우,이 오류의 원인이되는 열 / 필드가 테이블에 가입 한 번 확인합니다.

    (안드리 지적으로) 내 경우에는이 때문에 알 수없는 이유로 필드에 동일한 오류를 생성 한 자체 가입의 부족이었다.

  10. ==============================

    10.대신 당신이 가입 시도 할 수 있습니다 테이블, 좋아

    대신 당신이 가입 시도 할 수 있습니다 테이블, 좋아

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

    이 작업을해야합니다

  11. ==============================

    11.

    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;
    
  12. ==============================

    12.내 오류가 테이블에 존재하지 않는 필드를 사용하는 것이 었습니다.

    내 오류가 테이블에 존재하지 않는 필드를 사용하는 것이 었습니다.

    table1.field1 =>가 존재하지 않다

    table2.field1 => 정확한

    당신의 테이블 이름을 수정합니다.

    내 오류 때문에 함께 사용하는 발생

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

    에서 사용하는 경우 다른 테이블과 조인 ...

  13. ==============================

    13.당신은 어떤 테이블을 조인하는 것을 잊지나요? 그렇지 않으면 당신은 아마 별칭을 사용해야합니다.

    당신은 어떤 테이블을 조인하는 것을 잊지나요? 그렇지 않으면 당신은 아마 별칭을 사용해야합니다.

  14. ==============================

    14.나는 또한이 오류와 함께 고민하고 답과 같은 전략과 함께 끝났다. 나는이 일을해야 전략 인 것을 단지 확인에 내 대답을 포함하고있다.

    나는 또한이 오류와 함께 고민하고 답과 같은 전략과 함께 끝났다. 나는이 일을해야 전략 인 것을 단지 확인에 내 대답을 포함하고있다.

    여기에 제 1 내부 일 두 테이블 I 데이터를 가지고 알고 다음이 개 왼쪽 외부가 비어있을 수 해당 행이있을 수 있습니다 테이블에 조인 간의 조인 내가 할 예입니다. 당신은 혼합 내부 조인 및 외부 대신 기본 쉼표를하는 데이터 전체의 테이블 결과가 원하는 행이 조인에서 테이블과 미스 사이의 구문을 분리 얻기 위해 섭니다.

    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]%')
    

    첫째 : 마 내부 사용자가 데이터 일치를 기대 테이블 간의 조인. 두 번째 부분 : 외부 계속 다른 테이블의 데이터를 검색하려고 조인 테이블 외부는 조건 / 상태에에서 설정 한 조건에 데이터 나 일치 해당 가지고하지에 가입하는 경우 그러나 이것은 당신의 결과 집합을 필터링하지 않습니다.

  15. ==============================

    15.이 오류는 단순히 SELECT 문에서 열 이름 사이에 쉼표 누락으로 인해 발생할 수 있습니다.

    이 오류는 단순히 SELECT 문에서 열 이름 사이에 쉼표 누락으로 인해 발생할 수 있습니다.

    예를 들면 :

    SELECT MyCol1, MyCol2 MyCol3 FROM SomeTable;
    
  16. from https://stackoverflow.com/questions/7314134/the-multi-part-identifier-could-not-be-bound by cc-by-sa and MIT license