Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / помогите написать SQL / 8 сообщений из 8, страница 1 из 1
04.07.2012, 17:37
    #37866472
Rust()
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите написать SQL
есть 2 таблицы
T1
idval12253146
T2
idid_t1val113211321432535645
Как сделать выборку без повторений с полями id, val по связанным таблицам чтобы поле val выбиралось по минимальному значению. То есть рузультат должен быть
id val11213145
Вроде простое решение должно быть, но оно на ум не приходит(
...
Рейтинг: 0 / 0
04.07.2012, 17:44
    #37866490
Rust()
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите написать SQL
И еще, в таблице t2 значения id_t1 могут отсутствовать
...
Рейтинг: 0 / 0
04.07.2012, 17:46
    #37866496
londinium
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите написать SQL
Код: sql
1.
2.
SELECT ID_T1,MIN(VAL) AS MINN 
FROM T2 GROUP BY ID_T1



Так?
...
Рейтинг: 0 / 0
04.07.2012, 17:50
    #37866504
Rust()
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите написать SQL
londinium,
нет, выборку надо сделать по обоим таблицам (значения могут быть либо в одной, либо в другой), то есть 2 таблицы надо объединить и при этом для каждого id выбрать минимальное val
...
Рейтинг: 0 / 0
04.07.2012, 17:59
    #37866521
londinium
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите написать SQL
Что-то я не понимаю,
может, тогда так:

Код: sql
1.
2.
3.
4.
5.
6.
SELECT Z.ID,MIN(Z.VAL)AS MINN    FROM
(
SELECT ID,VAL FROM T1
UNION
SELECT ID,VAL FROM T2
)AS Z GROUP BY Z.ID
...
Рейтинг: 0 / 0
04.07.2012, 18:00
    #37866523
Wiseman_And
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите написать SQL
а как таблицы связаны то ?
...
Рейтинг: 0 / 0
04.07.2012, 18:43
    #37866589
Roman OL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите написать SQL
Rust(),

не проверял, т.к. ddl вы не предоставили )

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select r1.id, least (r1.val, t1.val) as val
from (
    select id_t1, min(val)
    from t2
    group by id_t1
) as r1 (id, val)
    inner join t1 as t1 on r1.id = t1.id
order by r1.id
...
Рейтинг: 0 / 0
04.07.2012, 19:22
    #37866628
CawaSPb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите написать SQL
londinium,

Поправка:
Код: sql
1.
2.
3.
4.
5.
6.
SELECT Z.ID,MIN(Z.VAL)AS MINN    FROM
(
SELECT ID,VAL FROM T1
UNION
SELECT ID_T1, VAL FROM T2
)AS Z GROUP BY Z.ID



Что интересно, при UNION ALL оптимизатор догадывается раскрыть его и проводить группировку на таблицах по отдельности. Как будет быстрее, зависит от реальных данных.

Roman OL,
Это был бы самый оптимальный вариант, если бы не было условия "значения могут быть либо в одной, либо в другой". А так надо вводить full outer join и оптимизатор начинает чего-то мудрить (вводить дополнительный скан T1 таблицы).
Значение при этом нужно было бы выбирать как least (COALESCE(r1.val, t1.val), COALESCE(t1.val, r1.val)), на время выполнения это уже не влияло бы.
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / помогите написать SQL / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]