如何获得 INNER Join 价值

Posted

技术标签:

【中文标题】如何获得 INNER Join 价值【英文标题】:How to get INNER Join Value 【发布时间】:2014-03-01 13:18:04 【问题描述】:

我有三个表 PurchaseDetails、SalesDetails 和 ProductMaster。 我有一个产品在那里 master P0001

如何在sql2008中加入这个表来获取损益报告

我写了这段代码我不明白为什么它显示了四次......

SELECT PM.product_id,
       PM.product_name,
       PM.company_name,
       PM.opening_stock,

  (SELECT SUM(CAST(qty AS decimal(18, 0))) AS [Purchase Stock ]
   FROM Purchase_Order_Details) AS [Purchase Stock ],
       CAST(CONVERT(decimal(18, 0), PM.opening_stock) +
              (SELECT SUM(CAST(qty AS decimal(18, 0))) AS [Purchase Stock ]
               FROM Purchase_Order_Details AS Purchase_Order_Details_1) AS decimal(18, 0)) AS [Total Purchase Stock],
       CAST(CONVERT(decimal(18, 2), PM.opening_stock) * CONVERT(decimal(18, 2), PM.rate) + CONVERT(decimal(18, 2), PO.net_amount) AS decimal(18, 2)) AS [Total Purchase Cost],

  (SELECT SUM(CAST(qty AS decimal(18, 0))) AS [Purchase Stock ]
   FROM Order_Details) AS [Sales Stock ], PM.closing_stock AS [Closing Stock], O.net_amount AS [Sales Cost]
FROM Purchase_Order_Details AS POD
INNER JOIN Purchase_Order AS PO ON POD.pdoc_id = PO.pdoc_id
INNER JOIN Product_Master AS PM
INNER JOIN Order_Details AS OD ON PM.product_id = OD.product_id
INNER JOIN Ordered AS O ON OD.doc_id = O.doc_id ON POD.product_id = PM.product_id

输出

谁能解决这个问题?

【问题讨论】:

基本 SQL 调试 - 将您的 SELECT 子句更改为 SELECT *,然后使用您的眼球找出哪些列实际包含不同的数据。这应该会通知您哪些JOINs 正在生成多行。 【参考方案1】:

您没有连接到 Product_Master 表的条件,因此您将从该表中获取所有行。也就是说,所有其他行的所有 product_master 行。那应该解释它。尝试将连接条件添加到与其相关的表中。

    INNER JOIN Product_Master AS PM

【讨论】:

【参考方案2】:

为什么下面的语句是空的?有什么意义吗??

不要使用 Purchase_Order_Details 而是先尝试使用 Product_Master

INNER JOIN Product_Master AS PM

【讨论】:

我是通过系统自动构建的,不知道为什么会这样,你能解释一下吗? 你是如何构建它的?在管理工作室?也许数据库中没有定义外键。然后你必须手动添加连接条件。

以上是关于如何获得 INNER Join 价值的主要内容,如果未能解决你的问题,请参考以下文章

SQL 使用 INNER JOIN 获取 MIN() 和 MAX()

使用 COUNT 和 INNER JOIN 选择查询

Python threading 中join()的作用

如何从剑道组合框获得价值

我如何从反应模式引导中获得价值?

如何在php上获得价值127.0.0.1而不是::1