Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
JOIN для таблиц со связью "один ко многим"
|
|||
|---|---|---|---|
|
#18+
Добрый день. Что-то не могу сообразить. Есть две таблицы - t1 и t2, связанные по полю id. Каждой записи в t1 соответствует несколько записей в t2. Нужно каждую запись в t1 связать с одной из записей в t2, которая оказалась первой при сортировке, например, по дате. То есть запрос должен выглядеть примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Пните в какую-нибудь сторону. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2008, 12:19 |
|
||
|
JOIN для таблиц со связью "один ко многим"
|
|||
|---|---|---|---|
|
#18+
один из вариантов. не проверял. select id, f1, ( select t2.f1 from t2 where t2.id = t1.id order by t2.date limit 1 ) as t2_f1 from t1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2008, 13:36 |
|
||
|
JOIN для таблиц со связью "один ко многим"
|
|||
|---|---|---|---|
|
#18+
Спасибо, почти то, что нужно. Правда, мне из подзапроса нужно вернуть несколько полей, но это уже дело техники. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2008, 15:00 |
|
||
|
JOIN для таблиц со связью "один ко многим"
|
|||
|---|---|---|---|
|
#18+
_Андрей_МСпасибо, почти то, что нужно. Правда, мне из подзапроса нужно вернуть несколько полей, но это уже дело техники.Никто тебе не мешает снести подзапрос из секции SELECT в секцию FROM... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2008, 05:29 |
|
||
|
JOIN для таблиц со связью "один ко многим"
|
|||
|---|---|---|---|
|
#18+
Получим тот-же join, только неявный. С примерно такой-же руганью ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2008, 10:09 |
|
||
|
JOIN для таблиц со связью "один ко многим"
|
|||
|---|---|---|---|
|
#18+
select * from t1 join ( select distinct on ( id ) * from t2 order by id, date ) using ( id ); еще можно попробовать с GROUP BY без DISTINCT ON ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2008, 10:23 |
|
||
|
JOIN для таблиц со связью "один ко многим"
|
|||
|---|---|---|---|
|
#18+
_Андрей_М пишет: > select t1.id, t1.f1, t2.f1 > from t1 > join ( select t2.id, t2.f1 > from t2 > where t1.id = t2.id > order by t2.d > limit *1* > ) as tt2 > on t1.id = tt2.id Не в моих правилах писать запросы, так что считай, что тебе повезло ... :-) select t1.id, t1.f1, t2.f1 from t1 as t1 join t2 as t2 on t1.id = t2.id and t2.d = ( select min(g.d) from t2 g where g.id = t1.id ) Но это будет работать только при уникальном поле "d" для всех записей в одной группе с одинаковым значением "id". Если конечно PG такое выдержит... Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2008, 19:11 |
|
||
|
JOIN для таблиц со связью "один ко многим"
|
|||
|---|---|---|---|
|
#18+
Ну раз даже MasterZiv нарушил свои принципы, придётся отчитаться о проделанной работе :-) Конечно, реальный запрос несколько сложнее, чем приведённый пример. В моём случае самым быстрым оказался вариант с DISTINCT ON. Вариант SELECT ... (SELECT ...) оказался в 2 - 3 раза медленнее. Окончания выполнения запроса с MIN() дожидаться не стал, т. к. время превысило время DISTINCT ON, и смысла ждать дальше не было. Получается, что выгоднее выбрать два набора данных и связать их JOIN'ом, чем взять один набор, и выдёргивать для каждой его записи что-то из другого набора, вроде SELECT ... WHERE t1.id = (SELECT ... t1.id = t2.id ...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2008, 09:56 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=35322874&tid=2004339]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 375ms |

| 0 / 0 |
