Sql 选择联接表操作

Sql 选择联接表操作,sql,Sql,在下面的查询中,我通过base_id列将表b、c、d连接到a。 但是,我需要在SELECT语句中执行一些操作。 由于b、c和d没有相互连接 我的(a.qty-(b.qty-(c.qty+d.qty))公式是否仅计算具有相同基本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

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

我的
(a.qty-(b.qty-(c.qty+d.qty))
公式是否仅计算具有相同基本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

我想你对加入的工作原理感到困惑(如果我没看错的话)。如果您有:

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)的行,然后加入到c中,其中Id与a(1)相同,那么a、b和c都具有相同的Id


因此,是的,
(a.qty-(b.qty-(c.qty+d.qty))
将只对a、b、c和d都具有相同
基本id的行执行该计算。在嵌套语句中,您联接
base\u id
上的所有表。这意味着,作为这些联接的结果,您将得到一个巨大的表,其中包含所有联接表中的列,其中有一个公共列是您联接的(
base\u id

我想您需要
(a.qty-(b.qty-(c.qty+d.qty))
请不要标记垃圾邮件。我删除了各种DBMS的标签。请只标记你正在使用的产品。@Nick是的,你是对的,我的错。你正在使用哪种产品?“SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您实际使用的数据库产品添加以下内容:
postgresql
oracle
sqlserver
db2
,…我认为通过使用条件聚合可以大大简化这一过程