代码之家  ›  专栏  ›  技术社区  ›  Crayons

SQL:基于关系关系的返回值

  •  0
  • Crayons  · 技术社区  · 6 年前

    考虑一个SQL Server数据库中的三个表, STOCK , BINS VENDORS :

    :: STOCK                    :: BINS               :: VENDORS
    +------+-----+-------+      +-----+--------+      +----+---------+
    | SKU  | BIN | COUNT |      | BIN | VENDOR |      | ID |  NAME   |
    +------+-----+-------+      +-----+--------+      +----+---------+
    | 1000 | A01 |     3 |      | A01 |      1 |      |  1 | Apples  |
    | 2000 | A02 |     4 |      | A02 |      1 |      |  2 | Oranges |
    | 1000 | B01 |     6 |      | B01 |      2 |      +----+---------+
    +------+-----+-------+      +-----+--------+
    

    如何返回包含 股票 表,以及 表,条件是我正在寻找一个特定的sku。供应商名称需要根据bin和VENDORS表之间的ID关系来确定。

    期望输出:

    +------+-----+-------+---------+
    | SKU  | BIN | COUNT | VENDOR  |
    +------+-----+-------+---------+
    | 1000 | A01 |     3 | Apples  |
    | 1000 | B01 |     6 | Oranges |
    +------+-----+-------+---------+
    

    我尝试使用左外连接和嵌套选择。例如,使用此查询:

    SELECT [stock].*,
           (
            SELECT [vendors].[name]
            FROM [vendors], [bins]
            WHERE [vendors].[id] = [bins].[vendor]
              AND [bins].[bin] = [stock].[bin]
           ) AS [vendor]
    FROM [stock]
    WHERE [stock].[sku] = '1000'
    

    我得到这个结果(问题是空的):

    +------+-----+-------+--------+
    | SKU  | BIN | COUNT | VENDOR |
    +------+-----+-------+--------+
    | 1000 | A01 |     3 | Apples |
    | 1000 | B01 |     6 | NULL   |
    +------+-----+-------+--------+
    

    我如何形成查询,以便以最有效的方式实现上面提到的所需输出?

    1 回复  |  直到 6 年前
        1
  •  2
  •   GMB    6 年前

    简单连接应该满足您的需要:

    select
        s.*,
        v.name
    from stock s
    inner join bins b on b.bin = s.bin
    inner join vendors v on v.id = b.vendor
    where s.sku = 1000
    

    如果可能有未知的垃圾箱或供应商,您可以使用 left join inner join s。

    推荐文章