2016-01-01 2 views
0

У меня есть 2 SQL-запроса.Внутреннее соединение в postgreSQL, получающем повторяющиеся строки

запроса 1

select file_number_fk,sent_date as submitted_date from fl_file_movement 
where sent_by_post_fk='735' 
and file_number_fk='98223' 

запрос 2

select file_number_fk,received_date as received_date from fl_file_movement 
where recipient_post_fk='735' 
and file_number_fk='98223' 

каждый запрос возвращает таблицу с 7 строк , когда я пытаюсь присоединиться к ним я получаю 49 строк

select distinct a.file_number_fk, 
     a.received_date, 
     b.submitted_date from(
     select file_number_fk,received_date as received_date from fl_file_movement 
where recipient_post_fk='735' 
and file_number_fk='98223')a LEFT JOIN (
select file_number_fk,sent_date as submitted_date from fl_file_movement 
where sent_by_post_fk='735' 
and file_number_fk='98223')b ON a.file_number_fk=b.file_number_fk 

я хочу объединенный стол с 7 рядами. как это сделать

+0

Попробуйте добавить 'GROUP BY'. – minatverma

+0

Ваш вопрос трудно ответить, не видя точных данных. Пожалуйста, покажите: 1) результат запросов 1 и 2 и 2) желаемый результат присоединения. –

ответ

0

Я думаю, что ваше JOIN условия не достаточно конкретное, поскольку оба запроса имеет равную на два полей и ваш JOIN имеет равный только на одном из них, таким образом, умножив результат:

select distinct a.file_number_fk, a.received_date, b.submitted_date 
from (select file_number_fk, received_date as received_date 
     from fl_file_movement 
     where recipient_post_fk='735' and file_number_fk='98223') a 
LEFT JOIN (
     select file_number_fk,sent_date as submitted_date 
     from fl_file_movement 
     where sent_by_post_fk='735' 
     and file_number_fk='98223') b 
    ON a.file_number_fk=b.file_number_fk AND a.recipient_post_fk = b.file_number_fk 

Вышеуказанный запрос - это в основном то, что вы предоставили + дополнительно JOIN состояние + улучшенная читаемость. Я думаю, что в этом случае можно удалить DISTINCT.

Кроме того, вы также можете решить это с помощью SELF JOIN. Что-то вроде этого:

SELECT src.file_number_fk, src.received_date, dest.submitted_date 
FROM fl_file_movement src 
    JOIN fl_file_movement dest ON dest.recipient_post_fk = src.sent_by_post_fk and src.file_number_fk = dest.file_number_fk 
WHERE dest.recipient_post_fk = '735' AND src.file_number_fk = '98223' 
+0

спасибо .. но он не работает, я получаю 49 строк для выполнения этого запроса – user3660715

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