У меня проблема с получением условий соединения для изоляции уникальных записей. Мой запрос возвращает декартовы произведения, и я не знаю, как это остановить. Мои таблицы выглядят так:
Table A
ID_1 Start End Name
137 1:00 2:00 Galia
137 2:00 3:00 Est
137 3:00 4:00 Omnia
137 4:00 5:00 Divisa
137 5:00 6:00 Partes
137 6:00 7:00 Tres
137 7:00 8:00 Quarum
137 8:00 9:00 Unam
137 9:00 10:00 Incolunt
Table B
ID_1Time_1 Time_2
137 3:10 3:57
И мой запрос будет:
select A.*, B.Time_1, B.Time_2
from Table_A A
inner join
Table_B B
on
A.ID_1 = B.ID_1 and B.Time_1<=A.End and B.Time_2 >= A.Start
И то, что я получаю, выглядит так:
ID_1Start End Name Time_1 Time_2
137 1:00 2:00 Galia 3:10 3:57
137 2:00 3:00 Est 3:10 3:57
137 3:00 4:00 Omnia 3:10 3:57
137 4:00 5:00 Divisa 3:10 3:57
137 5:00 6:00 Partes 3:10 3:57
137 6:00 7:00 Tres 3:10 3:57
137 7:00 8:00 Quarum 3:10 3:57
137 8:00 9:00 Unam 3:10 3:57
137 9:00 10:00 Incolunt3:10 3:57
Таким образом, похоже, что он дает декартово произведение двух таблиц, что имеет смысл, учитывая, что все три условия выполняются для каждой записи. Я хочу, чтобы возвращалась только запись, в которой время соответствует, например:
ID_1Start End Name Time_1 Time_2
137 3:00 4:00 Omnia 3:10 3:57
Любые советы о том, как структурировать объединение для достижения этой цели? Я работаю над коробкой Netezza, если это поможет с доступной функциональностью. Спасибо.
3:57 >= 9:00
верно? - person Aprillion   schedule 22.04.2013