2016-06-16 2 views
0

У меня есть этот рабочий запрос, который генерирует данные так, как мне это нравится, но теперь я хочу, чтобы он добавлял другое предложение предложения, которое будет получать строки из tbl_loan_master, которых не было на tbl_loanledger ,Получить строки, которые не совпадают с другой таблицей

Пример данных:

tbl_borrowers

------------------------------------------ 
| id | first_name | last_name | deleted | 
| 1 |  Joe | Smith | 0  | 
| 2 | Lily | Mag | 0  | 
| 3 |  Zen | Green | 0  | 
| 4 | Kim  | Chan | 0  | 
| 5 | Bob  | Mac  | 1  | 
| 6 | Ben  | Cork  | 0  | 
------------------------------------------ 

tbl_loan_master

---------------------------------------------------------------------- 
| id | borrowers_id | loan | date_created | due_date | deleted | 
| 1 |  4  | 300 | 2016/04/28 | 2017/04/28 |  0  | 
| 2 |  1  | 100 | 2016/05/05 | 2017/05/05 |  0  | 
| 3 |  2  | 500 | 2016/06/08 | 2017/06/08 |  0  | 
| 4 |  1  | 200 | 2016/06/13 | 2017/06/13 |  0  | 
| 5 |  3  | 150 | 2016/06/15 | 2017/06/15 |  0  | 
| 6 |  6  | 50 | 2016/06/16 | 2017/06/16 |  0  | 
---------------------------------------------------------------------- 

tbl_loanledger

------------------------------------------------------------------------------ 
| id | borrowers_id | loanmaster_id | payment | balance| date_created | deleted 
| 1 |  4  |  1  | 50 | 250 | 2016/05/28 | 0 
| 2 |  1  |  2  | 20 | 80 | 2016/05/25 | 0 
| 3 |  1  |  2  | 30 | 50 | 2016/06/01 | 0 
| 4 |  2  |  3  | 100 | 400 | 2016/06/09 | 0 
| 5 |  2  |  3  | 50 | 350 | 2016/06/10 | 0 
| 6 |  3  |  4  | 50 | 150 | 2016/06/16 | 0 
------------------------------------------------------------------------------ 

Вот рабочий запрос:

$query = "SELECT `tbl_borrowers`.* , `tbl_loanledger`.*, `tbl_loan_master`.* 
    FROM `tbl_borrowers` 
    LEFT JOIN `tbl_loanledger` 
     ON `tbl_borrowers`.id = `tbl_loanledger`.borrower_id 
    LEFT JOIN `tbl_loan_master` 
     ON `tbl_loan_master`.id = `tbl_loanledger`.loanmaster_id 
    WHERE `tbl_borrowers`.deleted = 0 AND `tbl_loanledger`.deleted = 0 AND MONTH (`tbl_loanledger`.date_created) = MONTH(CURRENT_DATE) 
     GROUP BY `tbl_loanledger`.borrower_id 
     ORDER BY `tbl_borrowers`.last_name"; 

Ожидаемый результат будет выводить заемщик с их последней сделкой на текущем месяц (что июнь) в ссудной книге, а также в виде кредитов счетов. Как и Бен Корк, который не находится в реестре кредитов, он находится на кредитных счетах, но я хочу вывести его на результирующий набор. Удаленный столбец означает, что если он равен 0, он указывает, что он активен, если он равен 0, это означает, что он был удален.

Ожидаемый результат:

|First Name | Last Name | Due Date | Balance  | 
| Ben | Cork | 2017/06/16 |  50  | 
| Joe | Smith | 2017/06/13 |  50  | 
| Lily |  Mag | 2017/06/08 |  350  | 
| Zen | Green | 2017/06/15 |  150  | 
+0

'выбрать * из tbl_borrowers левый присоединиться tbl_loanledger б на a.id = b.borrowers_id где b.id is null –

+0

Я добавил его в качестве комментария, потому что я не совсем уверен, понимаю ли я вопрос, заданный в запросе, и образец d ata и поля на этих таблицах. –

+0

Извините за путаницу @JorgeCampos, я удаляю часть кода запроса, которая не включена в данные образца и поля в таблице. Когда я пытаюсь добавить только что «tbl_loanledger'.id имеет NULL в существующем запросе, все записи не отображаются – zen

ответ

1

Попробуйте следующее;)

select 
    tb.first_name, tb.last_name, coalesce(tlm.Loan, 0) as Loan, coalesce(t.`Amount Paid`, 0) as `Last Amount Paid` 
from tbl_borrowers tb 
left join tbl_loan_master tlm 
on tb.id = tlm.borrowers_id 
left join (
    select t1.* 
    from tbl_loanledger t1 
    inner join (
     select max(id) as id 
     from tbl_loanledger 
     group by borrowers_id, loanmaster_id 
    ) t2 on t1.id = t2.id 
) t 
on tb.id = t.borrowers_id 
and tlm.id = t.loanmaster_id 

SQLFiddle DEMO HERE

+0

Я очень подавляю код и демонстрацию, которые вы предоставили @reno, вы сделали именно то, что ожидаемый вывод таблицы выше, но прямо сейчас мне сложно слить ваш код с существующим кодом запроса, который у меня есть. Если с вами все в порядке, я обновлю таблицы выше, чтобы показать точные данные в записи? – zen

+0

ОК, просто сделайте это. – Blank

+0

Я отредактировал таблицу, а также рабочий запрос @ reno, извините, потребовалось время – zen

Смежные вопросы