Вопрос про SQL запрос
Задачу сформулируй. Даты в разных таблицах могут совпадать?
select DT,IV,null from t1
union all
select DT,null,IV from t2
select DT,IV,null from t1
union all
select DT,null,IV from t2
задача получить такой резалтсет как я указал, все данные могут быть любыми
совпадать могут
совпадать могут
Короче, вот тебе второй вариант. Какой из них подойдет зависит от задачи.
select DT,t1.IV,t2.IV from t1
outer join t2 using(DT)
select DT,t1.IV,t2.IV from t1
outer join t2 using(DT)
нет не работает
insert into t2 values ('2008-06-11 12:37:00', 17)
17 и 7 не объединяет
insert into t2 values ('2008-06-11 12:37:00', 17)
17 и 7 не объединяет
Опиши поведение в случае наличия совпадающих/повторяющихся дат.
вот вслучае совпадения дат, что должно быть
2008-06-11 12:30:00.000 NULL 0.000000
2008-06-11 12:31:00.000 1.000000 NULL
2008-06-11 12:32:00.000 NULL 2.000000
2008-06-11 12:33:00.000 3.000000 NULL
2008-06-11 12:34:00.000 NULL 4.000000
2008-06-11 12:35:00.000 5.000000 NULL
2008-06-11 12:36:00.000 NULL 6.000000
2008-06-11 12:37:00.000 7.000000 17.000000
2008-06-11 12:30:00.000 NULL 0.000000
2008-06-11 12:31:00.000 1.000000 NULL
2008-06-11 12:32:00.000 NULL 2.000000
2008-06-11 12:33:00.000 3.000000 NULL
2008-06-11 12:34:00.000 NULL 4.000000
2008-06-11 12:35:00.000 5.000000 NULL
2008-06-11 12:36:00.000 NULL 6.000000
2008-06-11 12:37:00.000 7.000000 17.000000
А если в одной таблице будут две одинаковые даты?
2008-06-11 12:37:00.000 7.000000 17.000000
А если добавить
insert into t2 values ('2008-06-11 12:37:00', 17)
insert into t2 values ('2008-06-11 12:37:00', 19)
?
insert into t2 values ('2008-06-11 12:37:00', 17)
insert into t2 values ('2008-06-11 12:37:00', 19)
?
не один к одному в одно время одно значение в каждой таблице
двух значений быть не может
двух значений быть не может
Тогда outer join подойдет.
вот ведь пиздец. взять простейший справочник по скулю не судьба, а ебать всем мозг - это пожалуйста
Юнионы - зло, если в них нет реальной необходимости (а такой практически никогда нет то за их использование надо отрывать руки.
Юнионы - зло, если в них нет реальной необходимости (а такой практически никогда нет то за их использование надо отрывать руки.а где же твой вариант решения данной задачи без юнионов?

На огромных таблицах спорно.
Объединить два мгновенно работающих запроса - хуже чем городить нетривиальные всеохватывающие условия.
Объединить два мгновенно работающих запроса - хуже чем городить нетривиальные всеохватывающие условия.
а где же твой вариант решения данной задачи без юнионов?А где же "данная задача"?
Я в этом треде никакой задачи не увидел, задача скрыта, а здесь автор треда пытается узнать, как именно реализовать один из вариантов решения задачи (судя по всему - неправильный).
Объединить два мгновенно работающих запроса - хуже чем городить нетривиальные всеохватывающие условия.Ряды разных таблиц - разные сущности, как их можно объединять?
Единственная задача, в которой я могу предположить использование юнионов - это что-нибудь вроде страницы со списком, например, списаний и зачислений. Но и там юнионы необязательны - страница с таким общим списком может понадобиться только за какой-то определённый срок (например, со вчерашней полуночи до текущего момента и можно тупо взять отдельно нужные ряды из одной таблицы, из другой, после чео объединять их уже перед выводом пользователя, удобные фишки юниона вроде LIMIT тут нахуй не нужны.
Иногда интерфейсы вывода информации пользователю (grid, ekRTF, Excel) не позволяют тебе совершать операции Union или Minus и их приходится осуществлять силами сервера БД.
тупо взять отдельно нужные ряды из одной таблицы, из другой, после чео объединять их уже перед выводом пользователя
А что же у тебя находится между БД и экселем, магия?
Юнионы - зло, если в них нет реальной необходимости (а такой практически никогда нет то за их использование надо отрывать руки.Речь идет о UNION или UNION ALL?
Конструктор отчетов. Используя его настройки можно формировать различного рода формы вывода информации. Если к созданию каждого отчета привлекать программиста, то эту систему невозможно/сложно будет поддерживать и развивать.
Конструктор отчетовОК, убедил.
Оставить комментарий
sanek300509
Как сделать проще?имеется
create table t1
(
DT datetime,
IV numeric(18,6)
)
create table t2
(
DT datetime,
IV numeric(18,6)
)
insert into t1 values ('2008-06-11 12:31:00', 1)
insert into t1 values ('2008-06-11 12:33:00', 3)
insert into t1 values ('2008-06-11 12:35:00', 5)
insert into t1 values ('2008-06-11 12:37:00', 7)
insert into t2 values ('2008-06-11 12:30:00', 0)
insert into t2 values ('2008-06-11 12:32:00', 2)
insert into t2 values ('2008-06-11 12:34:00', 4)
insert into t2 values ('2008-06-11 12:36:00', 6)
запрос в лоб
select b.*, t1.IV, t2.IV from
(
select DT from t1
union
select DT from t2
) b
left join t1 on t1.DT=b.DT
left join t2 on t2.DT=b.DT
резалтсет
2008-06-11 12:30:00.000 NULL 0.000000
2008-06-11 12:31:00.000 1.000000 NULL
2008-06-11 12:32:00.000 NULL 2.000000
2008-06-11 12:33:00.000 3.000000 NULL
2008-06-11 12:34:00.000 NULL 4.000000
2008-06-11 12:35:00.000 5.000000 NULL
2008-06-11 12:36:00.000 NULL 6.000000
2008-06-11 12:37:00.000 7.000000 NULL
проще как сделать?