2016-11-17 2 views
0

제 선택 도와주세요. 나는 carrier : car_id, car_name, car_zones (이 값은이 이동 통신사의 영역 데이터를 가진 테이블 이름), car_rates_exp (이 값은이 이동 통신사의 내보내기 속도 데이터가있는 테이블 이름)에 대한 정보가 들어있는 테이블 캐리어를 가지고 있습니다. car_rates_imp (이 값은이 운송 업체의 가져 오기 속도 데이터가있는 테이블 이름입니다.) car_href (이 값은이 운송 업체의 API 추적에 대한 href입니다)내부 열 값에 따라 다른 테이블을 결합하십시오

또한 모든 필드 중에서 'carrier_id' , from_country, 무게 및 shipper_rate. 나는 내부적으로 테이블을 만들려는 select를 만들고 싶지만,이 테이블 이름은 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 **를 포함시킵니다. (car id = o.carrier_id 인 이동 통신사의 car_zones 선택) o.from_country = z.id에 – Viki888

+0

'FROM' 절에서 하위 쿼리를 사용할 수 없습니다 이것은'FROM' 절의 다른 테이블을 참조합니다. 이것을 원합니까? 'o.carrier_id = z.car_id 및 o.from_country = z.id'에 내부 결합 연산자 z? 그렇지 않다면 무엇을 대신할까요? –

답변

2

하위 쿼리는 서브 쿼리에 ID를 추가

o.from_country = z.id 

에 합류 할 필드 ID를 포함하지 않습니다.

+0

아니요, 당신이 저를 이해하지 못했습니다 ... 이 선택 '(car_id = o.carrier_id 어디 car_id = 선택하십시오) - 가치 만 얻고 싶습니다. car_zones 이것은 id가있는 모든 국가를 포함하는 테이블 이름입니다. 그것들은 각 통신사마다 모두 다릅니다. 그래서 내가 테이블 이름을 얻고 싶습니다. inner join을 할 것입니다 – Vitaliy

+0

t.order_name, t.car_id, r.country를 테이블 t에서 선택하고 inner join case를 t.car_id로 바꾸십시오. 1이면 'dhl' 2이면 'ups'가으로 끝납니다. t.id = r.car_id case 함수는 car_id에 의존하는 테이블 이름을 바꿀 것이고이 연산자에 대한 모든 정보를 포함하는 테이블 이름을 얻을 수 있습니다. 그것에 합류 해. 그러나 그 curriers 때문에 약 10 PC가 될 것입니다, 나는이 새로운 코드가 미래에 추가됩니다, 그것을 수정할 필요 없이이 코드를 wtite 싶어요 – Vitaliy

관련 문제