I’ve two tables( bom and bom_parts). Need to inner join and display stock_deduct,GRN_id,part_id
fields.
Table 1 (bom):
Table 2 (bom_parts):
MySql query:
SELECT bom_part.stock_deduct, bom_part.GRN_id, bom.part_id FROM bom INNER JOIN bom_part ON bom_part.BOM_id=bom.id WHERE batch_id='0' AND `sr_no`=23 ORDER BY FIELD(part_id, 34,8,36,6)
Query Result:
Expected Result:
Even if the part_id
field is empty in this case 8, 6
, I just want to display the part_id with the stock_deduct field as 1 in the result as mentioned below.
Stock_deduct | GRN_id | part_id |
---|---|---|
1 | 6 | 34 |
2 | 9 | 34 |
3 | GRN1 | 34 |
1 | 8 | |
1 | GRN3 | 36 |
2 | GRN2 | 36 |
1 | 6 |
As you can see the row 4 and 7 in the expected result table as the specified ORDER BY FIELD(part_id, 34,8,36,6)
order.
Thanks in advance.
Advertisement
Answer
I think you want a left join
, and filtering:
select coalesce(bp.stock_deduct, 1) as stock_deduct, bp.grn_id, b.part_id from bom b left join bom_part bp on bp.bom_id = b.id where b.batch_id = 0 and b.sr_no = 23 and b.part_id in (34, 8, 36, 6) order by field(part_id, 34, 8, 36, 6)
The filter on bom.part_id
in the where
clause brings the relevent row of bom
. The we bring the parts table with a left join
, so unmatched boms are not filtered out. Finally, coalesce()
turns missing stock_deduct
to 1
.