在下面的查询中,我通过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
答案 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
)。