【问题标题】:SQL Query to select a products brand and relating it to a third table用于选择产品品牌并将其与第三个表相关联的 SQL 查询
【发布时间】:2021-10-15 17:47:18
【问题描述】:

我的任务是获取产品信息,例如最高销量、日期和品牌。但是,产品表中没有字段 Brands。我有两个单独的产品和品牌表,此外我还有另一个 product_sales 表,它基本上是产品销售的主表,但主表对品牌一无所知。

我想我必须以某种方式连接两个基本表,然后通过产品 ID 将它们链接到主表。 目前,我认为我必须使用包含品牌信息的两张表。

品牌有 {id, brandId, brandname, total }

BrandsProducts 有 {id, brandid, productId }

我的查询:

SELECT
    b.brandid, 
    b.brandname,
    p.productid
    FROM pgcdonbrands b, pgcdonbrandsproducts p
    WHERE b.brandid = p.brandid

我相信这会返回正确的结果、品牌名称和 ID,以及哪个产品 ID 与该品牌相关。我现在的问题是,我该如何继续在我的 Product Sales 表的主要查询中包含这个。最终结果应该是产品名称和品牌名称。

【问题讨论】:

  • 嗨@iivo 相同的productId 会在productSales 表中包含多次吗?
  • 是的,我相信是的。因为即使在同一产品上也会将销售添加到 productSales 中。
  • 因此您可以通过使用 INNER JOIN 而不是逗号来使用上层查询作为子查询,并将 WHERE 子句替换为 ON。
  • 我想我明白了.. 看起来怎么样?你介意写一些伪代码吗?

标签: php mysql


【解决方案1】:

类似的东西。根据您的数据,您将决定 JOIN TYPE (LEFT/INNER)。

SELECT *
FROM productSales ps
INNER JOIN (SELECT b.brandid, 
                 b.brandname,
                 p.productid
            FROM pgcdonbrands b
            INNER JOIN pgcdonbrandsproducts p
                    ON b.brandid = p.brandid) t
        ON ps.productid = t.productid;

【讨论】:

  • 嗨@iivo,请检查。您可以根据需要将子查询与主查询一起使用。这里我使用了子查询,因为我不知道你的表结构和你的期望。
【解决方案2】:
SELECT  ...
FROM    BrandsProducts
INNER JOIN Brands ON BrandsProducts.brandid = BrandsProducts.brandid
WHERE   ...

通过像这样连接您的表,您可以将它们用作一个虚拟表

【讨论】:

    猜你喜欢
    • 2010-11-26
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    相关资源
    最近更新 更多