2015-02-19 2 views
1

В таблице A у меня есть даты от 2014-01-01 до 2014-12-31PostgreSQL для каждой строки из одной таблицы объединить все строки из другой таблицы

action_date 
2014-01-01 
2014-01-02 
2014-01-03 
... 
2014-12-31 

В таблице B У меня есть информация, как

id name action_date deletion_date 
1 nik 2013-01-01 2014-02-03 
2 tom 2014-06-02 2014-06-30 
3 lola 2013-12-30 2014-01-01 

Я хочу для объединения строк из таблицы B в каждую таблицу строк A, если activation_date<=action_date<=deletion_date

, например.

action_date id name action_date deletion_date 
2014-01-01 1 nik 2013-01-01 2014-02-03 
2014-01-01 3 lola 2013-12-30 2014-01-01 
2014-01-02 1 nik 2013-01-01 2014-02-03 
2014-01-03 1 nik 2013-01-01 2014-02-03 
    [...] 
2014-02-03 1 nik 2013-01-01 2014-02-03 

2014-06-02 2 tom 2014-06-02 2014-06-30 
2014-06-03 2 tom 2014-06-02 2014-06-30 
    [...] 
2014-06-03 2 tom 2014-06-02 2014-06-30 

Я попытался использовать левое соединение без инструкции, только с условием. К сожалению, он не работает.

ответ

2

Вы можете использовать оператор between в вашем join состоянии:

SELECT a.action_date, b.* 
FROM b 
JOIN a ON a.action_date BETWEEN b.activation_date AND b.deletion_date 
+0

спасибо много. У меня есть еще один вопрос. Как мне сделать, если мне нужно добавить еще одно условие для удаления: action_date> = activation_date И (action_date <= deletion_date ИЛИ deleteion_date = '1970-01-01' – Marta

+0

@Marta Так же, как вы его написали :-) Замените мой 'on' с вашим, и все должно быть в порядке. – Mureinik

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