[英]SQL Select Query between 3 tables
我在創建查詢以從3個表中提取數據時遇到麻煩。
我有一個job_skus
表, skus
表和stage
表,並且我試圖選擇整個月的所有工作skus,而不管jobNo
,例如顯示4月份所有工作skus的列表。
表格的結構是
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
,還是提取該日期期間的所有階段,然后將結果job_sku
到job_sku
表中?
SELECT distinct 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
這是一個建議。 線程中的其他人建議使用與眾不同的結果,這將導致相同的結果,但是使用存在謂詞可澄清查詢(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聯接將使其易於維護。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.