Strelochka
|
blue beard
|
|
|
|
Рег.: 04.09.2004
|
Сообщений: 1716
|
|
Рейтинг: 563
|
|
Вопрос про SQL запрос
23.04.2008 15:39
|
|
|
Как сделать проще?
имеется
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
проще как сделать?
|
|
Storm
|
:)
|
|
|
|
Рег.: 09.09.2004
|
Сообщений: 3301
|
Из: hane.ru
|
Рейтинг: 132
|
|
|
Задачу сформулируй. Даты в разных таблицах могут совпадать?
select DT,IV,null from t1 union all select DT,null,IV from t2
|
|
|
Strelochka
|
blue beard
|
|
|
|
Рег.: 04.09.2004
|
Сообщений: 1716
|
|
Рейтинг: 563
|
|
Re: Вопрос про SQL запрос
[re: Storm]
23.04.2008 16:04
|
|
|
задача получить такой резалтсет как я указал, все данные могут быть любыми
совпадать могут
|
|
Storm
|
:)
|
|
|
|
Рег.: 09.09.2004
|
Сообщений: 3301
|
Из: hane.ru
|
Рейтинг: 132
|
|
|
Короче, вот тебе второй вариант. Какой из них подойдет зависит от задачи.
select DT,t1.IV,t2.IV from t1 outer join t2 using(DT)
|
|
|
Strelochka
|
blue beard
|
|
|
|
Рег.: 04.09.2004
|
Сообщений: 1716
|
|
Рейтинг: 563
|
|
Re: Вопрос про SQL запрос
[re: Storm]
23.04.2008 16:09
|
|
|
нет не работает
insert into t2 values ('2008-06-11 12:37:00', 17)
17 и 7 не объединяет
|
|
Storm
|
:)
|
|
|
|
Рег.: 09.09.2004
|
Сообщений: 3301
|
Из: hane.ru
|
Рейтинг: 132
|
|
Re: Вопрос про SQL запрос
[re: Storm]
23.04.2008 16:09
|
|
|
Опиши поведение в случае наличия совпадающих/повторяющихся дат.
Редактировал Storm (23.04.2008 16:12)
|
|
|
Strelochka
|
blue beard
|
|
|
|
Рег.: 04.09.2004
|
Сообщений: 1716
|
|
Рейтинг: 563
|
|
Re: Вопрос про SQL запрос
[re: Storm]
23.04.2008 16:12
|
|
|
вот вслучае совпадения дат, что должно быть
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
|
|
Storm
|
:)
|
|
|
|
Рег.: 09.09.2004
|
Сообщений: 3301
|
Из: hane.ru
|
Рейтинг: 132
|
|
|
А если в одной таблице будут две одинаковые даты?
|
|
|
Strelochka
|
blue beard
|
|
|
|
Рег.: 04.09.2004
|
Сообщений: 1716
|
|
Рейтинг: 563
|
|
Re: Вопрос про SQL запрос
[re: Storm]
23.04.2008 16:16
|
|
|
2008-06-11 12:37:00.000 7.000000 17.000000
|
|
Storm
|
:)
|
|
|
|
Рег.: 09.09.2004
|
Сообщений: 3301
|
Из: hane.ru
|
Рейтинг: 132
|
|
|
А если добавить insert into t2 values ('2008-06-11 12:37:00', 17) insert into t2 values ('2008-06-11 12:37:00', 19) ?
|
|
|
Strelochka
|
blue beard
|
|
|
|
Рег.: 04.09.2004
|
Сообщений: 1716
|
|
Рейтинг: 563
|
|
|
не один к одному в одно время одно значение в каждой таблице
двух значений быть не может
|
|
Storm
|
:)
|
|
|
|
Рег.: 09.09.2004
|
Сообщений: 3301
|
Из: hane.ru
|
Рейтинг: 132
|
|
|
Тогда outer join подойдет.
|
|
|
nafig_batat
|
looking for you
|
|
|
|
Рег.: 25.10.2005
|
Сообщений: 11580
|
Из: улица Ленина
|
Рейтинг: 8535
|
|
|
вот ведь пиздец. взять простейший справочник по скулю не судьба, а ебать всем мозг - это пожалуйста
|
слава роботам!!! |
|
penartur2
|
|
|
|
|
Рег.: 16.06.2005
|
Сообщений: 54495
|
|
Рейтинг: 429
|
|
|
Юнионы - зло, если в них нет реальной необходимости (а такой практически никогда нет), то за их использование надо отрывать руки.
|
Я ушел на новый форум. Там правовое государство. А еще можно удобно листать аплоад  |
|
botWi
|
|
|
|
|
Рег.: 22.11.2003
|
Сообщений: 10160
|
Из: Moscow
|
Рейтинг: 1764
|
|
|
В ответ на:
Юнионы - зло, если в них нет реальной необходимости (а такой практически никогда нет), то за их использование надо отрывать руки.
а где же твой вариант решения данной задачи без юнионов? 
|
Хватит дрочить на рейтинги |
|
Robinzon
|
Дракоша
|
|
|
|
Рег.: 28.09.2003
|
Сообщений: 5510
|
|
Рейтинг: 2851
|
|
|
На огромных таблицах спорно. Объединить два мгновенно работающих запроса - хуже чем городить нетривиальные всеохватывающие условия.
|
|
|
penartur2
|
|
|
|
|
Рег.: 16.06.2005
|
Сообщений: 54495
|
|
Рейтинг: 429
|
|
Re: Вопрос про SQL запрос
[re: botWi]
24.04.2008 00:51
|
|
|
В ответ на:
а где же твой вариант решения данной задачи без юнионов?
А где же "данная задача"? Я в этом треде никакой задачи не увидел, задача скрыта, а здесь автор треда пытается узнать, как именно реализовать один из вариантов решения задачи (судя по всему - неправильный).
|
Я ушел на новый форум. Там правовое государство. А еще можно удобно листать аплоад  |
|
penartur2
|
|
|
|
|
Рег.: 16.06.2005
|
Сообщений: 54495
|
|
Рейтинг: 429
|
|
|
В ответ на:
Объединить два мгновенно работающих запроса - хуже чем городить нетривиальные всеохватывающие условия.
Ряды разных таблиц - разные сущности, как их можно объединять? Единственная задача, в которой я могу предположить использование юнионов - это что-нибудь вроде страницы со списком, например, списаний и зачислений. Но и там юнионы необязательны - страница с таким общим списком может понадобиться только за какой-то определенный срок (например, со вчерашней полуночи до текущего момента), и можно тупо взять отдельно нужные ряды из одной таблицы, из другой, после чео объединять их уже перед выводом пользователя, удобные фишки юниона вроде LIMIT тут нахуй не нужны.
|
Я ушел на новый форум. Там правовое государство. А еще можно удобно листать аплоад  |
|
Robinzon
|
Дракоша
|
|
|
|
Рег.: 28.09.2003
|
Сообщений: 5510
|
|
Рейтинг: 2851
|
|
|
Иногда интерфейсы вывода информации пользователю (grid, ekRTF, Excel) не позволяют тебе совершать операции Union или Minus и их приходится осуществлять силами сервера БД.
В ответ на:
тупо взять отдельно нужные ряды из одной таблицы, из другой, после чео объединять их уже перед выводом пользователя
|
|
|
penartur2
|
|
|
|
|
Рег.: 16.06.2005
|
Сообщений: 54495
|
|
Рейтинг: 429
|
|
|
А что же у тебя находится между БД и экселем, магия?
|
Я ушел на новый форум. Там правовое государство. А еще можно удобно листать аплоад  |
|