Sql 选择联接表操作
在下面的查询中,我通过base_id列将表b、c、d连接到a。 但是,我需要在SELECT语句中执行一些操作。 由于b、c和d没有相互连接 我的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
(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
,…我认为通过使用条件聚合可以大大简化这一过程