Я хочу получить строки в первой таблице, которые не во второй таблице - PullRequest
0 голосов
/ 02 июня 2019

У меня есть таблица, назовем ее fees, и две другие таблицы, назовем их transactions и breakdowns.

Таблица

transactions сохраняет общую сводку полученных платежей, а таблица breakdowns - разбивку платежей.

таблица разбивки выглядит примерно так

id | transaction_id | fee_id

и таблица сборов выглядит примерно так

id | amount | description

Я хотел бы получить сборы в таблице сборов, в которых нет записей в таблице разбивок на основе транзакции_id

SELECT * FROM fees LEFT JOIN breakdowns ON (fees.id = breakdowns.fee_id) 
WHERE breakdowns.transaction_id = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

Код выше возвращает пустые строки

Ответы [ 2 ]

1 голос
/ 02 июня 2019

Использование not exists:

SELECT f.*
FROM fees f
WHERE NOT EXISTS (SELECT 1
                  FROM breakdowns b
                  WHERE b.fee_id = f.id AND
                        b.transaction_id = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
                 );

Вы также можете использовать LEFT JOIN, перемещая условие на breakdowns в предложение ON:

SELECT *
FROM fees f LEFT JOIN
     breakdowns b
     ON b.fee_id = f.id AND  
        b.transaction_id = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

Однако, я думаю, NOT EXISTS более прямо отражает ту логику, которую вы хотите. Кроме того, я не вижу причин возвращать значения NULL для столбцов в breakdowns.

0 голосов
/ 02 июня 2019

попробуйте

$data['showrecord'] = DB::table('fees')
           ->where('breakdown.transaction_id',"=",'xxxxx')
           ->leftjoin('breakdown', 'breakdown.fee_id', '=', 'fees.id')
           ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...