空Pivot表下关联采购与价格表的MySQL及Laravel查询实现
基于合理的表字段假设(原问题未明确各表具体字段名),以下是两种实现方案:
MySQL 原生查询语句
假设各表核心字段如下:
- 采购表(
purchase):country,medicine,quantity,purchase_date(采购日期字段) - 价格表(
prices):country,medicine,price_year(价格对应的年份),price
由于中间关联表price_purchase为空,直接关联采购表与价格表即可实现需求:
SELECT p.country, p.medicine, p.quantity, pr.price FROM purchase p JOIN prices pr ON p.country = pr.country AND p.medicine = pr.medicine AND YEAR(p.purchase_date) = pr.price_year;
如果需要保留无对应价格的采购记录(价格显示为NULL),可将JOIN替换为LEFT JOIN。
Laravel Query Builder 实现方案
基于上述字段假设,使用Laravel查询构造器实现:
use Illuminate\Support\Facades\DB; $results = DB::table('purchase as p') ->select('p.country', 'p.medicine', 'p.quantity', 'pr.price') ->join('prices as pr', function ($join) { $join->on('p.country', '=', 'pr.country') ->on('p.medicine', '=', 'pr.medicine') ->on(DB::raw('YEAR(p.purchase_date)'), '=', 'pr.price_year'); }) ->get();
若需保留无对应价格的采购记录,将join方法替换为leftJoin即可。
内容的提问来源于stack exchange,提问作者jose-cuevas
相关产品推荐
相关产品推荐

