2016-11-17 5 views
0

Hilf mir bitte mit meiner Auswahl. Ich habe ich Tabellenträger, die Informationen über Träger enthält: car_id, car_name, car_zones (dieser Wert ist Tabellenname, der die Zonendaten dieses Carriers hat), car_rates_exp (dieser Wert ist Tabellenname, der die Exporttarifdaten dieses Carriers hat), car_rates_imp (dieser Wert ist der Tabellenname, der die Importtarifdaten dieses Carriers enthält), car_href (dieser Wert ist href zum Tracking-API dieses Carriers)innere Join verschiedenen Tabellen, basierend auf Spalte Wert

Auch habe ich Tabelle 'orders', unter allen Feldern, hat es Spalte carrier_id , from_country, Gewicht und shipper_rate. Ich möchte eine Auswahl treffen, in der ich innere Verbindung mit Tabelle machen möchte, aber dieser Tabellenname in der Abfrage muss unterschiedlich sein, basierend auf carrier_id. Ich habe versucht, diese Abfrage zu machen, aber es funktioniert nicht:

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 

So ist die Zeichenfolge

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

nicht funktioniert, können Sie mir bitte helfen, diese Situation zu lösen?

+0

Ich entfernte die inkompatiblen Tags. Bitte fügen Sie das Tag für die Datenbank, die Sie wirklich verwenden, hinzu. –

+0

Fügen Sie ** id ** in die Unterabfrage als '(wählen Sie id, car_zones von Trägern, wo car_id = o.carrier_id) z auf o.from_country = z.id' – Viki888

+0

Sie können keine Unterabfrage in der FROM-Klausel haben das bezieht sich auf eine andere Tabelle in der FROM-Klausel. Willst du das: 'inner join carrier z auf o.carrier_id = z.car_id und o.from_country = z.id'? Wenn nicht, was stattdessen? –

Antwort

2

Die Unterabfrage enthält kein Feld-ID, die Sie

o.from_country = z.id 

Fügen Sie die ID der Unterabfrage beitreten.

+0

Nein, Sie missverstehen mich ... in diesem wählen '(wählen Sie car_zones von Trägern, wo car_id = o.carrier_id) - Ich möchte nur Wert erhalten car_zones Dies ist der Tabellenname, der alle Länder mit ihrer ID enthält. Sie sind alle für jeden Träger unterschiedlich. Also ich möchte einen Tabellennamen mit dem ich innere Verbindung machen werde – Vitaliy

+0

es ist auch wie wählen t.order_name, t.car_id, r.country von Tabelle t, innere verbinden Fall t.car_id wenn 1 dann 'Dhl' wenn 2 dann 'ups' Ende als r auf t.id = r.car_id die Fallfunktion wird Tabellennamen wechseln, abhängig von car_id, und dann werden wir Tabellenname erhalten, der alle Informationen über diesen Träger enthält, und kann schließe dich ihm an. aber aufgrund dieser curriers werden etwa 10 Stück, ich möchte diesen Code zu witite, ohne Notwendigkeit, es zu ändern, wenn einige neue corriers in Zukunft hinzufügen – Vitaliy

Verwandte Themen