2014-10-22 5 views
1

저는 SQL에 익숙하지 않으므로 나와 함께하시기 바랍니다. 특정 제품 코드가있는 행만 선택하려고합니다. 아래의 쿼리 결과에서 OR 구문을 사용하지 않고 하나의 옵션을 실행하면 결과가 좋지만 OR 구문을 사용하여 다른 옵션을 추가하면 결과가 정확하지 않습니다. ProductCode MW-BShorts-0009을 각 OrderID에 대해 계속 두는 것처럼 보입니다.각 행의 열에서 선택된 여러 값을 선택하십시오.

SELECT 
    Orders.OrderID, OrderDetails.ProductCode 
FROM 
    Orders, OrderDetails 
WHERE 
    Orders.OrderID = OrderDetails.OrderID 
    AND OrderDetails.ProductCode = 'MacFRC' 
    OR OrderDetails.ProductCode = 'MW-BShorts-0009' 
+1

rdbms를 추가하십시오. – Ram

+0

[오래된 습관을 사용하는 나쁜 습관] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins. aspx) - ANSI - ** 92 ** SQL 표준에서 ** * ANSI'JOIN' 구문으로 구식 * 쉼표로 분리 된 테이블 * 스타일 목록이 * 20 년 전 **로 대체되었습니다. 그리고 그 사용은 실망입니다 –

답변

1

사용 IN 절하고 그나마에도 가입 또는 주문 테이블에서 선택해야합니다 같은 그것의 더 나은 보이는 당신의 위의 쿼리에서 대신 Cartesian product

SELECT Orders.OrderID, OrderDetails.ProductCode 
FROM Orders 
JOIN OrderDetails 
ON Orders.OrderID = OrderDetails.OrderID 
AND OrderDetails.ProductCode IN ('MacFRC','MW-BShorts-0009') 
+0

네,이게 내가 찾고 있던 것이에요. 너를 사랑해. 감사!! – AZee

+0

그는 실제로 Orders 테이블에 조인이 필요합니까? OrderDetails 테이블의 OrderId는 orders 테이블의 OrderId에 대한 외래 키 여야하므로 IMO에 가입 할 필요가 없다고 생각합니다. –

+0

당신을 환영합니다. @ankk 자체가 쿼리라면 조인 할 필요가 없다고 언급 한 것처럼. 이것이 더 큰 쿼리의 일부분이거나 다른 컬럼이 관련되어 있다면, 조인은 유효합니다. – Ram

1

Join를 사용하는

select OrderID, ProductCode 
from OrderDetails 
where ProductCode IN ('MacFRC','MW-BShorts-0009') 
1

ANDOR보다 우선하므로 OR을 묶어야합니다. 괄호 절은 :

SELECT Orders.OrderID, OrderDetails.ProductCode 
FROM Orders, OrderDetails 
WHERE Orders.OrderID = OrderDetails.OrderID 
AND 
    (OrderDetails.ProductCode = 'MacFRC' 
    OR OrderDetails.ProductCode = 'MW-BShorts-0009') 

그러나 대신 테이블과 일치하는 WHERE 조건을 추가하는 JOIN 절을 사용해야하고, OR 보내고 두 가지 조건 대신 IN를 사용할 수 있습니다

SELECT Orders.OrderID, OrderDetails.ProductCode 
FROM Orders 
INNER JOIN OrderDetails 
    ON Orders.OrderID = OrderDetails.OrderID 
WHERE OrderDetails.ProductCode IN ('MacFRC', 'MW-BShorts-0009') 
1

당신은 사용할 수 있습니다 Srikanth가 언급했듯이. 그러나 operator precedence의 개념을 이해해야합니다. 귀하의 경우, "Orders.OrderID는 OrderDetails.OrderID와 OrderDetails.ProductCode가"MacFRC "와 같거나 OrderDetails.ProductCode가 'MW-BShorts-0009'와 같아야합니다. 원하는 것은 OrderID = ProductCode 기준이 ProductCode에 적용되는 것입니다.

곱하기 전에 덧셈을 할 때와 마찬가지로 기본 우선 순위를 괄호로 대체하면됩니다. 좋아요 :

SELECT Orders.OrderID, OrderDetails.ProductCode 
FROM Orders, OrderDetails 
WHERE Orders.OrderID = OrderDetails.OrderID 
AND (OrderDetails.ProductCode = 'MacFRC' 
OR OrderDetails.ProductCode = 'MW-BShorts-0009') 
+0

+1 설명 – Ram

관련 문제