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



Так?
...
Рейтинг: 0 / 0
помогите написать SQL
    #37866504
Rust()
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
londinium,
нет, выборку надо сделать по обоим таблицам (значения могут быть либо в одной, либо в другой), то есть 2 таблицы надо объединить и при этом для каждого id выбрать минимальное val
...
Рейтинг: 0 / 0
помогите написать SQL
    #37866521
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,VAL FROM T2
)AS Z GROUP BY Z.ID
...
Рейтинг: 0 / 0
помогите написать SQL
    #37866523
Wiseman_And
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а как таблицы связаны то ?
...
Рейтинг: 0 / 0
помогите написать SQL
    #37866589
Roman OL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
помогите написать SQL
    #37866628
CawaSPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
8 сообщений из 8, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / помогите написать SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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