2016-01-20 3 views
1

Раньше я фильтровал свой запрос только при одном условии. т.е. project_id Но теперь я добавил еще два условия для фильтрации. И ониОшибка оператора внешнего соединения

  1. Дата В

  2. Vehicle No.

Я попытался с ниже запроса

SELECT DISTINCT sv.mkey, vehicle_no, 
       TO_CHAR (date_in, 'dd/MM/yyyy') 
      || ' & ' 
      || time_in vehicleindate_time, 
       TO_CHAR (date_out, 'dd/MM/yyyy') 
      || ' & ' 
      || time_out vehicleoutdate_time, 
      gate_no_in || ' & ' || gate_no_out ingate_outgateno, 
      gd.good_type goods_type, net_weight netweight, 
       TO_CHAR (challan_date, 'dd/MM/yyyy') 
      || ' & ' 
      || challan_no challandate_no, 
      remark_in remarkin, NULL receipt_no, date_in 
     FROM xxcus.xxgid_supinv sv, 
      xxcus.xx_supinv_goodtype gd, 
      xxcus.xxacl_xxgid_user_mst ms 
     WHERE gd.good_type_code(+) = sv.good_type AND sv.project_id = 1469 
     OR TO_CHAR (date_in, 'dd/MM/yyyy') = '09/01/2015' 
     OR vehicle_no = '79' 
    ORDER BY date_in DESC, vehicle_no 

Но получил ошибку в

ORA-01719: внешнее соединение оператора (+) не допускается в операнде ИЛИ или В

Я не знаю, что происходит здесь не так. любезно предложите

+0

Использовать новый синтаксис - влево/вправо/FULL OUTER JOIN вместо (+) – Tatiana

+0

@Tatiana: но она прекрасно работает, если я использую только одно условие – BNN

+0

как мс стол присоединился к остальному запросу? – Matt

ответ

1

Вы должны использовать явные JOIN «S, а также вы должны определить, что присоединяется xxcus.xxacl_xxgid_user_mst ms к остальным вашего запроса.

SELECT DISTINCT sv.mkey, vehicle_no, 
       TO_CHAR (date_in, 'dd/MM/yyyy') || ' & ' || time_in vehicleindate_time, 
       TO_CHAR (date_out, 'dd/MM/yyyy') || ' & ' || time_out vehicleoutdate_time, 
       gate_no_in || ' & ' || gate_no_out ingate_outgateno, 
       gd.good_type goods_type, net_weight netweight, 
       TO_CHAR (challan_date, 'dd/MM/yyyy') || ' & ' || challan_no challandate_no, 
       remark_in remarkin, NULL receipt_no, date_in 
FROM xxcus.xxgid_supinv sv 
RIGHT OUTER JOIN xxcus.xx_supinv_goodtype gd ON sv.good_type = gd.good_type_code 
XXXX JOIN xxcus.xxacl_xxgid_user_mst ms ON XX.XXXXX ON ms.XXXXX 
WHERE sv.project_id = 1469 
OR TO_CHAR (date_in, 'dd/MM/yyyy') = '09/01/2015' 
OR vehicle_no = '79' 
ORDER BY date_in DESC, vehicle_no 
+0

Получение ошибки как 'ORA-00933: команда SQL не правильно закончена' на ** xxcus.xxacl_xxgid_user_mst ms ** – BNN

+0

@coder Читайте, что я написал !!!!' вам нужно определить, что объединяет xxcus.xxacl_xxgid_user_mst ms с остальной частью ваш запрос. '!!!!! – Matt

+0

все столбцы принадлежат 'xxcus.xxgid_supinv', поэтому я присоединяюсь к shd. – BNN

0

Вы используете (+) синтаксис, который не позволяет использовать условия ИЛИ; вы можете повторно написать свой запрос, используя явный OUTER JOIN; например:

SQL> create table table_id (id number); 

Table created. 

SQL> create table table_desc (id number, description varchar2(255)); 

Table created. 

SQL> begin 
    2 insert into table_id values (1); 
    3 insert into table_id values (2); 
    4 insert into table_id values (3); 
    5 insert into table_desc values (1, 'ONE'); 
    6 insert into table_desc values (3, 'THREE'); 
    7 insert into table_desc values (3, 'Three'); 
    8 end; 
    9/

PL/SQL procedure successfully completed. 

Неправильный путь:

SQL> select * 
    2 from table_id id, table_desc des 
    3 where id.id = des.id(+) 
    4 and des.description = 'Three' OR des.description = 'THREE'; 
where id.id = des.id(+) 
      * 
ERROR at line 3: 
ORA-01719: outer join operator (+) not allowed in operand of OR or IN 

правильный путь:

SQL> select id.id, des.description 
    2 from table_id id 
    3  LEFT OUTER JOIN table_desc des 
    4  ON id.id = des.id 
    5 where des.description = 'Three' OR des.description = 'THREE'; 

     ID DESCRIPTION 
---------- ------------------- 
     3 Three 
     3 THREE 

SQL> 
Смежные вопросы