[英]I want to fetch rows in a first table that are not in a second table
我有一個表,我們稱它為“ fees
,還有另外兩個表,我們稱它們為“ transactions
和breakdowns
。
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.