SELECT JOIN表操作

时间:2019-05-30 03:37:07

标签: sql

在下面的查询中,我通过base_id列将表b,c,d连接到a。 但是,我需要在SELECT语句中执行一些操作。 由于b,c和d没有相互连接,所以

我的(a.qty - (b.qty - (c.qty + d.qty)))公式仅计算那些具有相同base_id列的表吗?

SELECT (a.qty - (b.qty - (c.qty + d.qty))) AS qc_in 
  FROM receiving a
  LEFT JOIN (
     SELECT SUM(qty) AS qty, base_id 
        FROM quality_control bb
       WHERE location_to = 6 
         AND is_canceled = 0 
       GROUP BY base_id
      ) b
         ON b.base_id = a.base_id
  LEFT JOIN (
      SELECT SUM(qty) AS qty, base_id 
        FROM quality_control ba
       WHERE location_from = 6
         AND is_canceled = 0
       GROUP BY base_id
      ) c
         ON c.base_id = a.base_id
  LEFT JOIN ( 
     SELECT SUM(qty) AS qty, base_id
       FROM issuance
      WHERE location_from = 6
        AND is_canceled = 0
      GROUP BY base_id
      ) d
         ON d.base_id = a.base_id
 WHERE a.is_canceled = 0

2 个答案:

答案 0 :(得分:1)

我认为您对联接的工作方式感到困惑(如果我正确阅读了问题)。如果您有:

select *
from table1 a
join table2 b 
    on a.Id = b.Id
join table3c
    on a.Id = c.Id

然后,是,a与b连接,b与c连接,但这也意味着a与c连接。认为它的一种方法是,在一个巨型内存表中,所有a列,然后所有b列,然后所有c列都包含在一个结果中。

如果a.Id为1,则从b中选择ID相同的行(1),然后加入ID与a相同的c(1),然后将a,b和c全部具有相同的ID。

是的,(a.qty - (b.qty - (c.qty + d.qty)))仅对a,b,c和d都具有相同的base_id的行进行该计算。

答案 1 :(得分:0)

当然。在嵌套的语句中,您联接base_id上的所有表。这意味着,通过这些联接,您将获得一个巨大的表,其中包含所有联接表中的列以及您所联接的公用列(在您的情况下为base_id)。