SQL Select 3表间查询

SQL Select Query between 3 tables

我在创建查询以从 3 table 秒中提取数据时遇到问题。

我有 job_skus table、skus table 和 stage table,我正在尝试 select 整个月的所有工作 SKU,而不考虑 jobNo,例如显示 4 月份所有工作 SKU 的列表。

table 的结构是

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 table?

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

首先,使用正确的联接。您使用的连接样式已弃用。
Explicit joins 加入 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' 

这是一个建议。线程中的其他人建议 distinct 会导致相同的结果,但是使用 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 连接将使其更易于维护。