繁体   English   中英

我想在第一张表中获取不在第二张表中的行

[英]I want to fetch rows in a first table that are not in a second table

我有一个表,我们称它为“ fees ,还有另外两个表,我们称它们为“ transactionsbreakdowns

transactions表保存收到的付款的一般摘要, breakdowns保存付款的明细。

故障表看起来像这样

id | transaction_id | fee_id

和费用表看起来像这样

id | amount | description

我想根据Transactions_id在费用明细表中获取没有明细表中记录的费用

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

上面的代码返回空行

使用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更直接地捕获您想要的逻辑。 另外,我认为没有理由为breakdowns的列返回NULL值。

尝试这个

$data['showrecord'] = DB::table('fees')
           ->where('breakdown.transaction_id',"=",'xxxxx')
           ->leftjoin('breakdown', 'breakdown.fee_id', '=', 'fees.id')
           ->get();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM