如何通过匹配一些冗余字段从 3 个表中获取唯一数据?
Posted
技术标签:
【中文标题】如何通过匹配一些冗余字段从 3 个表中获取唯一数据?【英文标题】:How to get unique data from 3 tables by matching some redundant fields? 【发布时间】:2019-10-11 10:17:36 【问题描述】:我一直在自学 SQL,现在遇到这种情况的问题。
我有 3 张桌子,
SALES
(商品 SKU、价格、客户邮箱、公司名称)
PRODUCTS
(商品 SKU、商品名称、商品类型)
CUSTOMER
(客户邮箱、姓名、部门、地址)
注意:SALES 和 PRODUCTS 中的“Item SKU”可以有同一个项目的多个实例。
我想从“PRODUCTS”表中选择所有不同的 SKU(不是重复的条目),并将每个 SKU 与“SALES”表进行匹配,以查找该产品的所有销售额。
还有
必须匹配 CUSTOMER 表中的“客户电子邮件”,并将其与 SALES 中的相同,并显示客户的“部门”和“地址”。
与
如果 SALES 中的“公司名称”与“ABC 公司”和“DEF 公司”匹配,则显示它们。
到目前为止,我已经设法从 SALES 和 PRODUCTS 获取详细信息,但它们包含冗余 SKU,具体取决于公司名称,而且我还没有连接 CUSTOMER 表。
SELECT "SALES".*,"PRODUCT"."Item SKU"
FROM "SALES"
JOIN "PRODUCT" ON "SALES"."Item SKU" = "PRODUCT"."Item SKU"
WHERE "Company Name" LIKE '%ABC Company%'
OR "Company Name" LIKE '%DEF Company%'
ORDER BY "PRODUCT"."Item SKU" ASC ;
总而言之,我需要从 PRODUCT 中获取唯一的“Item SKU”,并与 SALES 中的唯一“Item SKU”相匹配,并将它们与相应的“客户电子邮件”“部门”和“地址”一起显示客户。
【问题讨论】:
向我们展示一些示例表数据和(匹配的)预期结果 - 作为格式化文本,没有图像。 @jarlh 刚刚添加了示例数据,抱歉现在出差所以使用记事本。 示例数据最好显示为formatted text(无法从图像中复制数据)。请参阅here,了解有关如何创建漂亮表格的一些提示。 样本数据和期望的结果会有所帮助。你说products
有重复的 SKU,但你的数据没有显示任何 - 而且这样的重复没有真正的意义。
@GordonLinoff 抱歉,只有 SALES 列出了多个 SKU。另外我不能编辑它,因为你已经重新格式化了它,我的编辑需要是实质性的(因为变化很小)。
【参考方案1】:
好的,这些不是最漂亮的,但它们应该可以完成工作:
` 选择不同的 p.sku, p.name, (从 sku = p.sku 的销售额中选择总和(价格)) 从 产品 p 在哪里 p.sku in(从sales中选择不同的sku) 订购 1
select distinct
p.sku,
( select sum( price ) from sales where sku = p.sku and email = c.email ) as total,
c.name,
c.email,
c.department,
c.address
from
products p,
sales s,
customer c
where
p.sku = s.sku and
s.email = c.email
order by
1, 3
select distinct
c.name,
c.department,
c.address,
s.sku,
( select sum( price ) from t_sales where sku = s.sku and email = s.email )
from
customer c,
sales s
where
c.email = s.email
order by
1, 2, 4
`
【讨论】:
以上是关于如何通过匹配一些冗余字段从 3 个表中获取唯一数据?的主要内容,如果未能解决你的问题,请参考以下文章