簡體   English   中英

在3個表之間進行SQL Select查詢

[英]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_skujob_sku表中?

首先,使用適當的聯接。 您使用的聯接樣式已棄用。
顯式聯接已成為ANSI SQL的20多年了。

其次,如果您獲得正確的結果,但是某些行重復了,則只需添加DISTINCT

SELECT DISTINCT jm.sku,jm.quantity,p.description 
FROM stage as s 
INNER JOIN job_sku as jm ON(jm.stage = s.stage)
INNER JOIN products as p ON(p.sku = jm.sku)
WHERE s.Date BETWEEN '2015-04-01' AND '2015-04-30' 
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM