복붙노트

[SQL] SQL에서 모호한 열 이름을 가진 쿼리 오류

SQL

SQL에서 모호한 열 이름을 가진 쿼리 오류

나는이 쿼리 (InvoiceID)와 함께 모호한 열 이름 오류가 발생합니다. 그 이유를 알아낼 수 없습니다. 그들은 모두 왜 관리 스튜디오 VendorID 값을 표시 모르는 올바르게 결합 할 것 같다? 어떤 도움을 크게 감상 할 수있다.

질문:

SELECT 
    VendorName, InvoiceID, InvoiceSequence, InvoiceLineItemAmount
FROM Vendors 
JOIN Invoices ON (Vendors.VendorID = Invoices.VendorID)
JOIN InvoiceLineItems ON (Invoices.InvoiceID = InvoiceLineItems.InvoiceID)
WHERE  
    Invoices.InvoiceID IN
        (SELECT InvoiceSequence 
         FROM InvoiceLineItems
         WHERE InvoiceSequence > 1)
ORDER BY 
    VendorName, InvoiceID, InvoiceSequence, InvoiceLineItemAmount

해결법

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

    1.당신은 InvoiceID에서 모호성을 가지고 생각합니다. 다른 필드는 별개의 것. 그래서이 시도

    당신은 InvoiceID에서 모호성을 가지고 생각합니다. 다른 필드는 별개의 것. 그래서이 시도

    난 그냥 Invoices.InvoiceID와 InvoiceID 교체

       SELECT 
            VendorName, Invoices.InvoiceID, InvoiceSequence, InvoiceLineItemAmount
        FROM Vendors 
        JOIN Invoices ON (Vendors.VendorID = Invoices.VendorID)
        JOIN InvoiceLineItems ON (Invoices.InvoiceID = InvoiceLineItems.InvoiceID)
        WHERE  
            Invoices.InvoiceID IN
                (SELECT InvoiceSequence 
                 FROM InvoiceLineItems
                 WHERE InvoiceSequence > 1)
        ORDER BY 
            VendorName, Invoices.InvoiceID, InvoiceSequence, InvoiceLineItemAmount
    

    당신은 (선택의 경우, GROUP BY와 ORDER BY) 모든 열에 대해 tablename.columnnae을 사용할 수있는 별칭을 사용하지 않고. 당신이 별칭을 사용할 수 있습니다 그러나 다른 답변에 의해 인도로

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

    2.당신은 청구서 테이블 또한 InvoiceLineItems 테이블의 컬럼 InvoiceID 있습니다. 쿼리 실행 엔진은 당신이 반환 할 하나 알 수있는 방법은 없습니다.

    당신은 청구서 테이블 또한 InvoiceLineItems 테이블의 컬럼 InvoiceID 있습니다. 쿼리 실행 엔진은 당신이 반환 할 하나 알 수있는 방법은 없습니다.

    테이블 별칭을 추가하면 도움이 될 것입니다 :

    SELECT V.VendorName, I.InvoiceID, IL.InvoiceSequence, IL.InvoiceLineItemAmount
    FROM Vendors V
    JOIN Invoices I ON (...)
    JOIN InvoiceLineItems IL ON (...)
    WHERE ...
    ORDER BY V.VendorName, I.InvoiceID, IL.InvoiceSequence, IL.InvoiceLineItemAmount
    
  3. ==============================

    3.둘 다 InvoiceID를 포함하는 두 개의 테이블 송장 및 InvoiceLineItems에 합류 때문이다. Invoices.InvoiceID로 변경이 올바른지 확인합니다.

    둘 다 InvoiceID를 포함하는 두 개의 테이블 송장 및 InvoiceLineItems에 합류 때문이다. Invoices.InvoiceID로 변경이 올바른지 확인합니다.

  4. ==============================

    4.대부분의 경우 두 테이블은 같은 이름의 열이. 각 테이블 별칭 테이블 별칭과 각 열을 호출합니다.

    대부분의 경우 두 테이블은 같은 이름의 열이. 각 테이블 별칭 테이블 별칭과 각 열을 호출합니다.

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

    5.일부 필드는 모두 테이블에 존재한다 (특히 인보이스 테이블과 InvoiceLineItems에 InvoiceID) 때문이다. 질문에 대답하는 방법은 그것에 별칭을 추가하는 것입니다.

    일부 필드는 모두 테이블에 존재한다 (특히 인보이스 테이블과 InvoiceLineItems에 InvoiceID) 때문이다. 질문에 대답하는 방법은 그것에 별칭을 추가하는 것입니다.

    SELECT 
        a.VendorName,  Invoices.InvoiceID, .. -- or use full tableName
    FROM Vendors a   -- This is an `ALIAS` of table Vendors
    JOIN Invoices ON (Vendors.VendorID = Invoices.VendorID)
    JOIN InvoiceLineItems ON (Invoices.InvoiceID = InvoiceLineItems.InvoiceID)
    WHERE  
        Invoices.InvoiceID IN
            (SELECT InvoiceSequence 
             FROM InvoiceLineItems
             WHERE InvoiceSequence > 1)
    ORDER BY 
        VendorName, InvoiceID, InvoiceSequence, InvoiceLineItemAmount
    
  6. ==============================

    6.당신이 2 개 이상의 테이블을 조인하고 그들의 열 SQL Server의 경우 유사한 이름이있는 경우 자신이 속한 열을 한정하고자합니다.

    당신이 2 개 이상의 테이블을 조인하고 그들의 열 SQL Server의 경우 유사한 이름이있는 경우 자신이 속한 열을 한정하고자합니다.

    SELECT  ev.[ID]
        ,[Description]
        FROM   [Events] as ev 
        LEFT JOIN  [Units] as un ON ev.UnitID = un.UnitId  
    

    이벤트 및 단위 테이블이 동일한 열 이름이있는 경우 (ID) SQL 서버는 별칭을 사용하고 싶어.

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

    7.당신의 테이블 중 하나는 테이블의 컬럼은 당신이 언급되는에 관한 질의에 혼란을 가져 오는 동일한 열 이름의이 있습니다. 이 코드를 복사 한 후 실행합니다.

    당신의 테이블 중 하나는 테이블의 컬럼은 당신이 언급되는에 관한 질의에 혼란을 가져 오는 동일한 열 이름의이 있습니다. 이 코드를 복사 한 후 실행합니다.

    SELECT 
        v.VendorName, i.InvoiceID, iL.InvoiceSequence, iL.InvoiceLineItemAmount
    FROM Vendors AS v
    JOIN Invoices AS i ON (v.VendorID = .VendorID)
    JOIN InvoiceLineItems AS iL ON (i.InvoiceID = iL.InvoiceID)
    WHERE  
        I.InvoiceID IN
            (SELECT iL.InvoiceSequence 
             FROM InvoiceLineItems
             WHERE iL.InvoiceSequence > 1)
    ORDER BY 
        V.VendorName, i.InvoiceID, iL.InvoiceSequence, iL.InvoiceLineItemAmount
    
  8. ==============================

    8.하나 개 이상의 테이블에 같은 이름을 가진 필드가 있기 때문에, 쿼리에 일어나는 조인의 때문에, 그래서 당신은 테이블에 이름을 (별칭)을주고, 다른 필드를 참조해야합니다.

    하나 개 이상의 테이블에 같은 이름을 가진 필드가 있기 때문에, 쿼리에 일어나는 조인의 때문에, 그래서 당신은 테이블에 이름을 (별칭)을주고, 다른 필드를 참조해야합니다.

  9. from https://stackoverflow.com/questions/12662954/query-error-with-ambiguous-column-name-in-sql by cc-by-sa and MIT license