我在创建查询以从3个表中提取数据时遇到了麻烦。
我有一个job_skus
表,一个表skus
和一个stage
表,并且我试图选择整个月份jobNo
的所有工作清单,而不考虑,例如,以显示4月份所有工作清单的列表。
表格的结构是
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
表上?
这是一个建议。线程中的其他人建议使用与众不同的结果将导致相同的结果,但是使用存在谓词可澄清查询(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] 删除。
我来说两句