簡體   English   中英

如何從父表的兩個子表中獲取值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM