Mysql
離開並組合不為空的結果
我得到了一個帶有如下表的 MySQL 數據庫:
show create table c; CREATE TABLE `c` ( `id` int(11) NOT NULL AUTO_INCREMENT, -- and other columns PRIMARY KEY (`id`) ) show create table c_r; CREATE TABLE `c_r` ( `id` int(11) NOT NULL AUTO_INCREMENT, `c_id` int(11) DEFAULT NULL, `c_date` date DEFAULT NULL, `something_numeric` decimal(8,3) DEFAULT NULL, -- and other columns PRIMARY KEY (`id`), CONSTRAINT ... FOREIGN KEY (`c_id`) REFERENCES `c` (`id`) ) show create table c_s; CREATE TABLE `c_s` ( `id` int(11) NOT NULL AUTO_INCREMENT, `c_id` int(11) DEFAULT NULL, `c_date` date DEFAULT NULL `something_numeric` decimal(8,3) DEFAULT NULL, -- and other columns PRIMARY KEY (`id`), CONSTRAINT ... FOREIGN KEY (`c_id`) REFERENCES `c` (`id`) )
現在,對於每個 ,我想要
date
來自 的something_numeric
值的總和以及來自 的值的c_r
總和。如果其中一個為空,我仍然想要另一個。我的輸出應該有一行。something_numeric``c_s``date
我看不出有什麼辦法。如果我
join
兩次,我只會得到兩個和c.id
中都存在的日期;所以我需要兩次。但是,我如何確保每行都得到一行,無論它只存在於一個表中,只存在於另一個表中,還是兩者都存在?c_r``c_s``left join``date``date
如果沒有您的實際查詢嘗試,有些事情很難理解。
根據您所說,您只希望按日期分組,而不是來自
c
. 既然如此,根本不清楚是否c
需要在查詢中。以下查詢應該為您提供所需的總數,對於在
c_r
或中找到的所有日期c_s
:SELECT c_date ,COALESCE(SUM(r_amount),0) as r_amount ,COALESCE(SUM(s_amount),0) as s_amount FROM ( SELECT c_date, 0 as r_amount, something_numeric as s_amount FROM c_s UNION ALL SELECT c_date, something_numeric as r_amount, 0 as s_amount FROM c_r ) sq GROUP BY c_date ;
如果您需要通過某個值來限制行,則子查詢中
c
的INNER JOIN
每個表要c
單獨使用相同的WHERE
子句。您可以交替地包含c
子查詢SELECT
列表中的值,並在主查詢中進行過濾,但這可能效率較低。