|
|
|
Помогите с запросом плиз !
|
|||
|---|---|---|---|
|
#18+
Добрый день, Пожалуйста, помогите с запросом - целый день бьюсь, не хватает знаний (( Есть две таблицы: Master: ID, MasterData Slave: ID, MasterID, SlaveData Как выбрать записи из Master и Slave, у которых Slave.MasterID=Master.ID и при этом наибольшим MAX(SlaveData) ? Например, для такого набора данных: Master: ID,MasterData 1, a 2, b Slave: ID,MasterID,SlaveData 1,1,10 2,1,20 3,2,10 4,2,20 Результат должен быть: 1,а,2,1,20 2,b,4,2,20 Очень бы хотелось решение на обычных SELECT, JOIN, GROUP BY, HAVING, без специфичных для разных серверов БД расширений. Большое спасибо за помощь ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2013, 18:34:28 |
|
||
|
Помогите с запросом плиз !
|
|||
|---|---|---|---|
|
#18+
amsdev, Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2013, 18:44:47 |
|
||
|
Помогите с запросом плиз !
|
|||
|---|---|---|---|
|
#18+
Приношу извинения, фак изучаю, один из вариантов похож на мой ! К сожалению, пример от qwerty112 адски грузит сервер - окончания запроса не дождаться.. Т.к. я забыл добавить, что в таблицах несколько сотен тысяч записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2013, 23:24:31 |
|
||
|
Помогите с запросом плиз !
|
|||
|---|---|---|---|
|
#18+
amsdevПриношу извинения, фак изучаю, один из вариантов похож на мой ! К сожалению, пример от qwerty112 адски грузит сервер - окончания запроса не дождаться.. Т.к. я забыл добавить, что в таблицах несколько сотен тысяч записей. 1. Запрос нормальный, это у вас нет индексов. Обвязательно нужен индекс на Slave.masterID 2. В факе обратите внимание на логики Т1,2,3,4. Подсказаный запрос -- это Т4 логика. Это может быть -- а может и не быть -- то что вы хотите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 03:41:55 |
|
||
|
Помогите с запросом плиз !
|
|||
|---|---|---|---|
|
#18+
javajdbc, чёта ни понял... а как в этом запросе решается ответ на ".. и при этом наибольшим MAX(SlaveData).." без агрегата да ещё и с IS NULL? ... или ещё с утра "туплю"... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 06:22:07 |
|
||
|
Помогите с запросом плиз !
|
|||
|---|---|---|---|
|
#18+
Arhat109, Это, что называется, LEFT ANTI JOIN ;) В итоговую выборку берется лишь то, то не нашло себе пару в само-соединении. А условие соединение построено таким образом, что пару себе не найдет лишь запись с максимум. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 06:39:13 |
|
||
|
Помогите с запросом плиз !
|
|||
|---|---|---|---|
|
#18+
Добрый Э - ЭхArhat109, Это, что называется, LEFT ANTI JOIN ;) В итоговую выборку берется лишь то, то не нашло себе пару в само-соединении. А условие соединение построено таким образом, что пару себе не найдет лишь запись (или записи) с максимум. чуть поправил, если не возражаете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 06:50:02 |
|
||
|
Помогите с запросом плиз !
|
|||
|---|---|---|---|
|
#18+
Arhat109, ну и как маленькая иллюстрация по теме: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. On-line проверка на sqlfiddle.com ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 07:40:15 |
|
||
|
Помогите с запросом плиз !
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, пасибки... только я вопрос задал к тому что а простой агрегат, разве не решит туже самую задачу (отдать максимальные, с парами или без оных)? ... или выдирать гланды через ..опу да удаленно и по интернету, теперь модно? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 11:12:42 |
|
||
|
Помогите с запросом плиз !
|
|||
|---|---|---|---|
|
#18+
Arhat109, туже самую задачу можно решить несколькими способами. почти все они описаны в Ф.А.К. выбор того или иного способа - дела личных предпочтений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 11:21:54 |
|
||
|
Помогите с запросом плиз !
|
|||
|---|---|---|---|
|
#18+
javajdbc1. Запрос нормальный, это у вас нет индексов. Обвязательно нужен индекс на Slave.masterID +1 я б ещё "попробовал" :) индекс на 2-а поля {masterID, SlaveData} ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 11:29:42 |
|
||
|
Помогите с запросом плиз !
|
|||
|---|---|---|---|
|
#18+
Arhat109Добрый Э - Эх, пасибки... только я вопрос задал к тому что а простой агрегат, разве не решит туже самую задачу (отдать максимальные, с парами или без оных)? ... или выдирать гланды через ..опу да удаленно и по интернету, теперь модно? :) для "заказанного" результата - не решит ТСРезультат должен быть: 1,а,2,1,20 2,b,4,2,20 ID-шников из Slave не будет, т.е. если с агрегированием, то это НЕ просто max/group by в джойне Master и Slave, нужно или корр.подзапрос с агрег. в условии или джойн с подзапросом (дерив.тейблой) с агреггированием, а это - "не факт", что лучше антиджойна ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 11:38:45 |
|
||
|
Помогите с запросом плиз !
|
|||
|---|---|---|---|
|
#18+
qwerty112....т.е. если с агрегированием, то это НЕ просто max/group by в джойне Master и Slave, нужно или корр.подзапрос с агрег. в условии или джойн с подзапросом (дерив.тейблой) с агреггированием, а это - "не факт", что лучше антиджойна ... В ФАК должна быть ссылка на предыдушие обсуждения с тестами. Я испытывал несколько вариантов. Антижоинт -- фактически картезиан внутри каждой группы. Когда много груп но группы маленькие, то выигрывал анти-жоинт. Когда мало груп но они большие -- агрегат выигрывал. (Имеется ввиду что обшее количество записей одинаковое). Точный момент когда меняется лидер зависит от конкретной ситуации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 15:39:46 |
|
||
|
Помогите с запросом плиз !
|
|||
|---|---|---|---|
|
#18+
qwerty112, :) вот вам ещё один вариант поиска с одной группировкой (не знаю, есть ли в факе, не смотрел): Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 16:04:13 |
|
||
|
Помогите с запросом плиз !
|
|||
|---|---|---|---|
|
#18+
Arhat109, Поскольку ищем максимальное, то пофиг "как" сравнивать... к тому же, при прочих равных этот вариант выдаст запись с последним s.ID... и не думаю, что "склеить/расклеить" стоит дороже чем подзапросы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 16:07:08 |
|
||
|
Помогите с запросом плиз !
|
|||
|---|---|---|---|
|
#18+
Arhat109Arhat109, кстати практически "оно": 7710123 Да, Яростный Меч показал имено эту идею. Она 100% подходит для задач по лигике Т1 и Т3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 18:21:12 |
|
||
|
Помогите с запросом плиз !
|
|||
|---|---|---|---|
|
#18+
javajdbc, Ну и? Понятно что подходит... вопрос остался непонятным: "зачем этот гемморой с антиджойном рекомендовать новичкам?" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 19:47:17 |
|
||
|
Помогите с запросом плиз !
|
|||
|---|---|---|---|
|
#18+
Arhat109javajdbc, Ну и? Понятно что подходит... вопрос остался непонятным: "зачем этот геммор р ой с антиджойном рекомендовать новичкам?" :)А новичку что не посоветуй - всё ему геморрой... И что теперь - ничего не советовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2013, 06:35:53 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38325169&tid=1836479]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
81ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
81ms |
get tp. blocked users: |
2ms |
| others: | 240ms |
| total: | 452ms |

| 0 / 0 |
