2015-08-06 4 views
1

Я работаю над базой данных оракула, и я хочу получить данные из 2-х таблиц. поэтому я использую для этого объединение. Мои таблицы, как показано ниже,Левое внешнее соединение не работает, как ожидалось, в oracle

CUSTOMER_DTLS_TBL 

CUST_ID  CUST_CODE 

68   A2157021570 

CUSTOMER_MAPPING_TBL 

ID  AMOUNT  CUST_ID  CODE   PID 
1  200   68   A2157021570  383 
2  800   68   A2157021570  392 


// NO RECORD FOUND 

SELECT CDT.CUST_ID,CDT.CUST_CODE,CMT.AMOUNT,CMT.PID 
FROM CUSTOMER_DTLS_TBL CDT, CUSTOMER_MAPPING_TBL CMT 
WHERE CDT.CUST_ID = CMT.CUST_ID(+) 
AND CMT.PID = 383; 


// 1 RECORD FOUND 

SELECT CDT.CUST_ID,CDT.CUST_CODE,CMT.AMOUNT,CMT.PID 
FROM CUSTOMER_DTLS_TBL CDT, CUSTOMER_MAPPING_TBL CMT 
WHERE CDT.CUST_ID = CMT.CUST_ID(+) 
AND CMT.PID = 392; 

мой ожидаемый выход, когда я запускаю первый запрос является:

68  A2157021570  200  383 
+1

Вы пытались написать фактическое соединение вместо (+)? –

+1

Вы попробовали это - 'CMT.PID (+) = 383'. Решите, является ли этот столбец частью предложения JOIN или FILTER. Его всегда лучше указывать на объединения и условия ON. – Manuel

+0

Да, я попробовал. Но это не работает. –

ответ

0

Когда кажется логичным, что стыки должны совпадать с данными, а затем проверить, если проблема с данные.
Простая вещь, которую следует упускать, заключается в сравнении varchar, содержащих пробелы.

В этом случае проверка, если добавление TRIM или RTRIM в соединении решает проблему. Или предотвратить его, изменив тип данных столбца, если в нем ожидаются только цифры.

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