![](/img/trans.png)
[英]Select data from two tables. one table is parent/child and I need to get the parents without a relation
[英]how to get values from two child tables for parent table
我有三个表(发票,费率,费率_slap)我在发票表中有重量和 no_of_package 如果发票.重量 < = rate.weight 那么它将返回该表 rate.weight else weight < = rate_slap.weight 然后它将返回该表rate_slap.weight
但返回任何一个表值,而不是从两者中返回。
SELECT
rate.`minimum_wgt`,
slap.`slap_weight`
FROM m_ac_customer_rate rate
LEFT JOIN m_ac_customer_rate_slap slap ON (rate.minimum_wgt<=15)
OR (slap.slap_weight<=15)
WHERE rate.customer_rate_id=slap.customer_rate_master
AND `customer_name`=1007
AND `destination_name`=3
AND `service_type`=1
AND `shipment_type`='D'
AND `payment_mode`='CASH';
样本数据
发票表
invoice_no,weight,total_carton
2142423, 10.4, 5
费率表
invoice_no,weight,rate_per_kg
2142423 , 15.8, 150.00
rate_slap 表
rateslap_id,weight,rate_per_kg
2142423 , 10.8, 10.00
这将在子查询中选择两个重量(如果存在)以及发票重量,然后在主查询中执行 CASE... 以选择正确的一个
SELECT no_of_package,
CASE WHEN weight <= rate_weight THEN rate_weight
WHEN weight <= slap_weight THEN slap_weight
ELSE 0
END AS other_weight
FROM
(SELECT i.weight, IFNULL(r.weight, 0) as rate_weight, IFNULL(rs.weight, 0) as slap_weight
FROM invoice I
LEFT JOIN rate r ON r.invoice_no = i.invoice_no AND minimum_wgt <= 15
LEFT JOIN rate_slap rs ON rs.invoice_no = i.invoice_no AND slap_weight <= 15
WHERE customer_name = 1007
AND destination_name = 3
AND service_type = 1
AND shipment_type = 'D'
AND payment_mode = 'CASH')
我选择 0 作为 CASE 的默认值,也许它应该是发票的重量。 您需要调整表名,我使用了名称的简短版本
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.