我有一个表,我们称它为fees
,另外两个表,我们称它们为transactions
和breakdowns
。
transactions
表保存收到的付款的一般摘要,而breakdowns
表保存付款的明细。
分解表看起来像这样
id | transaction_id | fee_id
费用表看起来像这样
id | amount | description
我想根据transaction_id在明细表中没有记录的费用表中获取费用
SELECT * FROM fees LEFT JOIN breakdowns ON (fees.id = breakdowns.fee_id)
WHERE breakdowns.transaction_id = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
上面的代码返回空行
答案 0 :(得分:1)
使用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
值。
答案 1 :(得分:0)
尝试
$data['showrecord'] = DB::table('fees')
->where('breakdown.transaction_id',"=",'xxxxx')
->leftjoin('breakdown', 'breakdown.fee_id', '=', 'fees.id')
->get();