3 개의 테이블에서 데이터를 가져 오는 쿼리를 만드는 데 문제가 있습니다.
나는 job_skus
테이블, skus
테이블, 테이블을 가지고 있으며 , 예를 들어 4 월의 모든 직업 skus 목록을 표시하기 위해에 stage
관계없이 한 달 전체의 모든 작업 skus를 선택하려고합니다 jobNo
.
테이블의 구조는
Job_Sku example data
JobNo J4454 J4454
Sku (refences Product.Sku) 93339 9947
Quantity 500 600
Stage 1 2
Products
Sku(primary key) 93339 9947
Description Galvanised Nails Steel Rods 900mm
Stage
jobNo J4454 J4454
stage 1 2
date 04/04/2015 12/04/2015
등등.
나는이 질의를 생각 해냈다
SELECT jm.sku,jm.quantity,p.description
FROM stage as s, products as p, job_sku as jm
WHERE s.Date BETWEEN '2015-04-01' AND '2015-04-30'
AND jm.stage = s.stage AND p.sku = jm.sku
그러나 쿼리에서 중복 데이터를 얻는 것 같습니다. 일종의 조인을 사용해야합니까, 아니면 해당 날짜 기간에 대한 모든 단계를 추출하고 결과를 job_sku
테이블 에 조인해야 합니까?
여기에 한 가지 제안이 있습니다. 스레드의 다른 사람들은 동일한 결과를 초래하는 구별을 제안했지만 exists 술어를 사용하면 쿼리 (IMO)의 의도가 명확 해집니다.
SELECT jm.sku
, jm.quantity
, p.description
FROM products as p
JOIN job_sku as jm
ON p.sku = jm.sku
WHERE EXISTS (
SELECT 1
FROM stage s
WHERE s.Date BETWEEN '2015-04-01' AND '2015-04-30'
AND jm.stage = s.stage
);
다른 사람들도 언급했듯이 ANSI 조인은 쿼리를 좀 더 이해하기 쉽게 만듭니다. 공급 업체는 우리가 살아있는 동안 ","조인을 계속 지원하므로 코드가 깨지지는 않지만 ANSI 조인을 사용하면 유지 관리가 더 쉬워집니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다