如何通过匹配一些冗余字段从 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 个表中获取唯一数据?的主要内容,如果未能解决你的问题,请参考以下文章

从 2 个不同片段的 sqlite 中的 2 个表中获取信息

Laravel:如何从具有关系的 3 个表中获取数据

从 2 个表中获取记录数 - 一对多关系

如何根据搜索关键字 rails 从 2 个表中获取数据

同时从四个表中获取按日期分组的聚合值

查询从 3 个表中获取数据,主表和总和列从彼此 2 个表中获取