2016-10-10 131 views
1

我有2個表MYSQL LEFT JOIN結果不給

銀行表

create table `banks` (
    `bank_id` int , 
    `bank_name` varchar (150), 
    `balance` double , 
    `b_date` date , 
    `delete_state` double 
); 
insert into `banks` (`bank_id`, `bank_name`, `balance`, `b_date`, `delete_state`) values('1','Emirates NBD','632008','2016-10-10','0'); 
insert into `banks` (`bank_id`, `bank_name`, `balance`, `b_date`, `delete_state`) values('3','HABIB BANK LIMITED','1134484','2016-10-10','0'); 

檢查表

create table `cheque` (
    `ch_id` int , 
    `bank_id` int , 
    `amount` double , 
    `status` int, 
    `delete_state` double 
); 
insert into `cheque` (`ch_id`, `bank_id`, `amount`, `status`, `delete_state`) values('4','1','15000','2','0'); 
insert into `cheque` (`ch_id`, `bank_id`, `amount`, `status`, `delete_state`) values('9','1','250000','1','0'); 

我的MySQL查詢

SELECT bk.*, SUM(amount) AS tot_amount, (bk.balance - SUM(amount)) AS bank_balance FROM banks bk LEFT JOIN cheque ch ON bk.bank_id = ch.bank_id 
WHERE ch.status = 1 AND bk.delete_state=0 AND ch.delete_state = 0 

我需要加入這兩張表格並從銀行標籤頁中獲取所有銀行的名稱即使檢查表沒有任何條目..

但目前我的查詢是給予當檢查表只有入口,所以它只返回一個銀行結果..請檢查,讓我知道我在哪裏錯過了!

回答

2

您需要通過bank_id進行分組。當你對一個問題進行分組時,你會得到你分組變量的每個值的結果。

SELECT bk.*, SUM(amount) AS tot_amount, (bk.balance - SUM(amount)) AS bank_balance 
FROM banks bk 
LEFT JOIN cheque ch ON (bk.bank_id = ch.bank_id AND ch.status = 1 AND ch.delete_state = 0) 
WHERE bk.delete_state=0 
GROUP BY bk.bank_id; 

SQL Fiddle

+0

雲你請解釋爲什麼GROUP BY在這裏幫了忙? –

+0

這是工作,謝謝ALOT – Wazan

0

試試這個:

SELECT bk.*, 
     SUM(CASE WHEN bk.delete_state=0 THEN amount ELSE 0 END) AS tot_amount, 
     SUM(CASE WHEN bk.delete_state=0 THEN bk.balance ELSE 0 END) 
     - 
     SUM(CASE WHEN bk.delete_state=0 THEN amount ELSE 0 END) AS bank_balance 
FROM banks bk 
LEFT JOIN cheque ch ON bk.bank_id = ch.bank_id AND ch.status = 1 AND ch.delete_state = 0 
GROUP BY bk.`bank_id`, bk.`bank_name` 

的幾個注意事項:

  • 該查詢使用GROUP BY條款,所以每bank_id返回一個單獨的記錄。
  • 有關cheque表的謂詞已從WHERE移至ON子句。否則LEFT JOIN變成INNER JOIN
  • 查詢使用有條件彙總以至只有考慮與銀行有關的記錄bk.delete_state=0