주문

2013-10-09 3 views
2
  • p_nop_desc을 가지고 Products의 테이블 거기에없는 제품 설명을 가져옵니다.
  • p_no (위와 동일)이 표시된 order_details의 표가 있습니다. products.p_noorder_details하지 않을 경우

은 내가 p_desc이 필요합니다.주문

참고 : 많은 검색을 수행했으며 결과로 나온 것입니다.

-- Why would this work? 
select p_desc from products 
except 
select p_no from order_details 

-- Then, 
select p_desc from products 
where products.p_no not in order_details.p_no 

-- and finally, 
select p_desc from products 
where (p_no not in (select p_no from order_details)) 

이 중 하나가 맞습니까? 나는 except을 사용하라는 말을 들었지만, 첫 번째 문장이 p_no 속성을 어떻게 비교하는지 보지 못하기 때문에 이것이 잘못되었다고 생각합니다.

+0

http://technet.microsoft.com/en-us/library/ms188055.aspx – Johan

+0

모든 소스 (숙제 포함)의 질문은 모든 질문에 대한 기준을 충족하는 한 스택 오버플로를 환영합니다 (명확한, 간결하고, 문제를 재현하기위한 코드, 시도한 해결책 및 연구 등). 숙제라고 말할 필요는 없으며, 실제로 그것을 버리고 질문을 훌륭한 프로그래밍 질문 (사용자의 특정 임무를 가지고 있지 않은 다른 사람들에게도 유용 할 수 있습니다)으로서 스스로 서도록하십시오. 언급 된 기준을 충족시킵니다. – Jeroen

답변

0

가장 깨끗한 방법은 NOT EXISTS입니다. 해당 쿼리는 다음과 같이 것입니다 귀하의 경우에는

https://dba.stackexchange.com/questions/51270/get-unmatched-rows-for-foreign-key

(그 대답은 MySQL을 위해, 그러나 T-SQL 구문이 동일하다 있습니다.)

: 난 그냥 여기에 비슷한 질문에 대답 :

SELECT p_desc FROM dbo.products AS P 
WHERE (NOT EXISTS (SELECT 1 FROM dbo.order_details AS OD WHERE OD.p_no = P.p_no)); 
+0

그건 답이 아닙니다. 그것은 주석이어야합니다. OP는 "EXCEPT가 어떻게 작동합니까?"라고 물었습니다. – Johan

+0

대단히 감사합니다! 두 번째 선택에서 "1"의 기능이 무엇인지 물어볼 수 있습니까? –

+0

"가장 깨끗한"솔루션이 아니라 자신의 지식에 대한 귀하의 (근본적으로 보이는) 믿음에도 불구하고, 이것은 최악의 경우 일 가능성이 큽니다. 대부분의 경우 가장 깨끗하다고 ​​생각되는 해결책에 대한 @ Johan의 대답을 참조하십시오. – Bohemian

1

숙제이기 때문에 철자를 쓰지 않을 것입니다.

// 왜 작동합니까? ORDER_DETAILS

에서
선택 p_no를 제외하고 제품
에서
선택 p_desc

참조 : http://technet.microsoft.com/en-us/library/ms188055.aspx
힌트 : 다음 코드는 상당 :

SELECT p.p_desc FROM products p 
LEFT JOIN order_details o ON (o.p_no = p.p_no) 
WHERE o.p_no IS NULL 

// 그런 다음,
선택 제품의 p_desc
어디에서 products.p_no not in order_details.p_no

구문 오류가있는 것 같습니다.

// 마지막으로, 제품
에서
선택 p_desc 곳 (ORDER_DETAILS에서 p_no하지에 (선택 p_no))

좋아 보인다 내가 가장 쉬운 이해하기 위해이 하나를 찾을 수 있습니다. 나는 다른 플랫폼에 포트에 매우 열심히 할 것 같은 코드를 코드를 사용하여, 사용 인수의 용이성을 볼 수 있습니다 동안 마이크로 소프트의 EXCEPT

비고.
SQL-92의 핵심에 더 가까이 머물러라고 마지막 문장에서이 양식을 사용하는 것이 좋습니다.
이것은 당신에게보다 종합적인 프로그래머를 만들어 줄 것이며, 단일 플랫폼으로의 잠입을 막을 수 있습니다. 이는 직장 전망이 좋은 곳이면 될 것입니다.

뷰 포인트 코드 샘플 A는 샘플 C보다 이점이 없으므로 둘 다 실행 시간이 동일합니다.