2012-02-20 3 views
0

나는이 쿼리를 사용하고 있지만 내가 잘못이 ...SQL SELECT 중복 열

SELECT * FROM [Orders] 
JOIN [Customers] 
ON [Orders].[CustomerID] = [Customers].[CustomerID] 
WHERE [Orders].[OrderDate] BETWEEN '2010/1/1' AND '2011/1/1' 
AND [Orders].[Total] > 1 

내가 CustomerID를위한 중복 열 이름 오류를 받고 있어요. 이 작업을 위해 별칭을 사용하는 방법을 잘 모르겠습니다.

누군가가 올바르게 작성하는 방법을 보여줄 수 있습니까?

편집 : 모든 제안

덕분에, 여기에 내가 무엇을 함께 할 수 있습니다.

SELECT DISTINCT Orders.CustomerID, Orders.ShipToID, Orders.ShipName, Orders.ShipAddress, Orders.ShipAddress2, Orders.ShipCity, Orders.ShipStateOrProvince, Orders.ShipPostalCode, Orders.Total, Orders.OrderDate, Customers.Profession 
FROM Orders 
JOIN Customers 
ON Orders.CustomerID = Customers.CustomerID 
WHERE Orders.OrderDate BETWEEN '4/3/2010' AND '2/20/2011' 
AND Orders.Total > 1 

감사합니다.

+3

프로덕션 코드에서 'SELECT *'를 사용하지 마십시오. 열 이름을 지정하십시오. http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/10/bad-habits-to-kick-using-select-omitting-the-column-list.aspx –

+0

@AaronBertrand 훌륭한 조언 (및 아주 좋은 기사, 그런데). 게시물에 이것이 생산 코드라는 표시는 없습니다. – jadarnel27

+0

@ jadarnel27 확실하지만'SELECT * '을 사용하지 않아도 여전히 문제를 완화하는 데 도움이됩니다. 적어도 별칭을 제어 할 수는 있습니다. –

답변

3

SELECT *이 아니라 선택한 열에 대해 명시해야하며 두 테이블에서 비슷한 이름의 열을 가져와야하는 경우에는 별칭을 사용하십시오.

SELECT 
    Orders.OrderID, 
    /* alias example, not that you'd need both CustomerID columns */ 
    Orders.CustomerID AS oCustomerID, 
    Customer.CustomerID AS cCustomerID, 
    Customers.Name, 
    Customers.Address, 
    .... 
    .... 
FROM [Orders] 
JOIN [Customers] 
ON [Orders].[CustomerID] = [Customers].[CustomerID] 
WHERE [Orders].[OrderDate] BETWEEN '2010/1/1' AND '2011/1/1' 
AND [Orders].[Total] > 1 
2

*를 사용하지 않고 원하는 모든 열을 참조하고자합니다.

예 :

당신은 그 오류 방지하기 위해 처음에 테이블을 지정해야합니다
SELECT 
    C.ID, 
    O.ID 
FROM 
    [Orders] O 
    JOIN [Customers] C 
    ON O.[CustomerID] = C.[CustomerID] 
WHERE 
    O.[OrderDate] BETWEEN '2010/1/1' AND '2011/1/1' 
    AND O.[Total] > 1 
+1

당신은 여전히 ​​그 컬럼들에 별명을주고 싶다고 생각합니다. 중복 열을 감지하는 것이 무엇이든지간에 어떤 열이 왔는지 상관하지 않을 것이므로 결과 집합에 'ID'라는 두 개의 열이 표시됩니다. –

3

: 당신이 두 테이블에서 모든 열 을 원하지 않는 경우

SELECT [Orders].* FROM [Orders] 

을, 당신이 나열해야합니다 그들 모두를 분리하여 별칭으로 복제 CustomerID 열.

SELECT 
    [Orders].CustomerID AS oCustID, 
    [Customers].CustomerID AS cCustID, 
    [Orders].anotherColumn, 
    ... 
4
SELECT [Orders].* FROM [Orders] ... 

만 Orders 테이블에서 열을 얻는다. 또는 *을 건너 뛰고 원하는 열을 명시 적으로 작성하십시오.