首页 > 解决方案 > 使用子查询来连接两个表中的列

问题描述

我开始学习 SQL 并且有些东西我不明白

我想从 Production.products中获取列product_id 和 product_name并将其与 Production.stocks 表中的数量列连接起来,但我不想使用连接,而是想使用子查询。

这是我到目前为止写的代码:我不明白为什么它不起作用:(

SELECT P.product_id, P.product_name,(
SELECT S.quantity 
FROM Production.stocks AS S
WHERE S.product_id = P.product_id)
FROM Production.products as P;

我正在使用的数据库

标签: sqlsql-servertsql

解决方案


我认为根本不需要子查询。

如果产品是唯一的实体,那么就查询性能而言,连接到stocks 表并对数量进行求和肯定会更有益

SELECT 
    Production.Products.Product_id, 
    Production.Products.product_name,
    SUM(Production.Stocks.quantity) AS Quantity
FROM 
    Production.Products 
LEFT JOIN
    Production.Stocks 
    ON 
        Production.Stocks.product_id = Production.Products.product_id
GROUP BY
    Production.Products.product_id, 
    Production.Products.product_name

如果您需要它按商店报价库存数量,那么您需要在商店中添加一个附加连接并将商店添加到 select 和 group by 子句中,如下所示

SELECT 
    Production.Products.Product_id, 
    Production.Products.product_name,
    Sales.Stores.store_name,
    SUM(Production.Stocks.quantity) AS Quantity
FROM 
    Production.Products 
LEFT JOIN
    Production.Stocks 
    ON 
        Production.Stocks.product_id = Production.Products.product_id
LEFT JOIN
    Sales.Stores
    ON
        Production.Stocks.store_id = Sales.Stores.store_id
GROUP BY
    Production.Products.product_id, 
    Production.Products.product_name,
    Sales.Stores.store_name

希望有帮助


推荐阅读