2016-11-17 85 views
0

請幫我請我的選擇。 我有我的表運營商,它包含關於承運人的信息:car_id,car_name,car_zones(這個值是表名,它有這個承運人的區數據),car_rates_exp(這個值是表名,它有這個承運人的出口費率數據), car_rates_imp(這個值是表名,它有這個載體的導入率數據),car_href(這個值是href跟蹤這個載體的api)內部加入不同的表格,根據列值

另外我有表'orders',在所有字段中,它有列carrier_id ,from_country,weight和shipper_rate。我想做一個選擇,我想在表中進行內部連接,但查詢中的這個表名必須不同,基於carrier_id。我試圖使這個查詢,但它不工作:

SELECT o.id_order, 
     o.from_country, 
     c.firstname, 
     c.lastname, 
     o.carrier_id, 
     ot.name as order_type, 
     z.Zone_name, 
     cr.car_zones, 
     cr.car_name, 
     cr.car_href, 
     o.invoice_amount, 
     o.rated_weight, 
     o.shipping_rate, 
     o.shipping_rate_my_fee, 
     o.customs_tax, 
     o.customs_tax_2, 
     o.customs_my_fee, 
     o.total_shipping_fee, 
     o.total_my_costs, 
     o.1kg_price, 
     o.my_profit, 
     o.goods_for_ship, 
     o.waybill, 
     o.prev_DHL_fee, 
     o.customer_paid, 
     os.name as order_status, 
     os.color 
FROM orders o 
    inner join customer c on o.id_customer = c.id 
    inner join order_types on on o.order_type = ot.id 
    inner join (select car_zones 
       from carriers 
       where car_id=o.carrier_id) z on o.from_country = z.id 
    inner join carriers cr on IF(o.carrier_id = 0, 1, o.carrier_id) = cr.car_id 
    inner join order_status os on o.order_status = os.id 
where import_or_export = 'import' AND o.active > 0 

因此字符串

inner join (select car_zones from carriers where car_id=o.carrier_id) z on o.from_country = z.id 

不工作,可以請你幫我解決這種情況呢?

+0

我刪除了不兼容的標籤。請添加您真正使用的數據庫的標籤。 –

+0

在子查詢中包含** id **爲'(select_id,car_zones from carrier where car_id = o.carrier_id)z on o.from_country = z.id' – Viki888

+0

在'FROM'子句中不能有子查詢它引用'FROM'子句中的另一個表。你是否想要:o.carrier_id = z.car_id和o.from_country = z.id'上的inner join carriers z?如果不是,反而是什麼? –

回答

2

子查詢不包含字段ID,其要加入到

o.from_country = z.id 

的ID添加到子查詢。

+0

否的原因,您missunderstand我... 在此選擇「(請從運營商那裏car_zones = car_id o.carrier_id) - 我想唯一的價值car_zones這是表名,其中包含所有國家的ID。它們對於每個運營商都是不同的。所以我想用至極表名,我會做內部聯接 – Vitaliy

+0

它也喜歡選擇t.order_name,t.car_id,r.country從表t,內連接的情況下t.car_id 如果1那麼「DHL」 如果2那麼「UPS」端 爲r上t.id = r.car_id 的情況下功能將切換表名,取決於car_id,然後我們會得到表名,其中包含有關該載體的所有信息,並能加入它。 但由於這些製革工人將約10個,我想wtite thise代碼,而不需要修改它,當一些新corriers將在未來增加 – Vitaliy