powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с запросом плиз !
21 сообщений из 21, страница 1 из 1
Помогите с запросом плиз !
    #38324637
amsdev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

Пожалуйста, помогите с запросом - целый день бьюсь, не хватает знаний ((

Есть две таблицы:

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, без специфичных для разных серверов БД расширений.

Большое спасибо за помощь !
...
Рейтинг: 0 / 0
Помогите с запросом плиз !
    #38324658
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
amsdev,

Код: sql
1.
2.
3.
4.
5.
select m.*, s.* 
from Master m 
inner join Slave s on m.ID=s.MasterID
left join Slave s1 on s.MasterID=s1.MasterID and s.SlaveData<s1.SlaveData
where s1.ID is null
...
Рейтинг: 0 / 0
Помогите с запросом плиз !
    #38324828
amsdev,

интересно, F.A.Q. хоть кто-то читает перед тем, как задать свой "уникальный" вопрос?
...
Рейтинг: 0 / 0
Помогите с запросом плиз !
    #38324878
amsdev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приношу извинения, фак изучаю, один из вариантов похож на мой !

К сожалению, пример от qwerty112 адски грузит сервер - окончания запроса не дождаться.. Т.к. я забыл добавить, что в таблицах несколько сотен тысяч записей.
...
Рейтинг: 0 / 0
Помогите с запросом плиз !
    #38324938
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
amsdevПриношу извинения, фак изучаю, один из вариантов похож на мой !

К сожалению, пример от qwerty112 адски грузит сервер - окончания запроса не дождаться.. Т.к. я забыл добавить, что в таблицах несколько сотен тысяч записей.

1. Запрос нормальный, это у вас нет индексов.
Обвязательно нужен индекс на Slave.masterID

2. В факе обратите внимание на логики Т1,2,3,4.
Подсказаный запрос -- это Т4 логика.
Это может быть -- а может и не быть -- то что вы хотите.
...
Рейтинг: 0 / 0
Помогите с запросом плиз !
    #38324954
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbc,

чёта ни понял... а как в этом запросе решается ответ на ".. и при этом наибольшим MAX(SlaveData).." без агрегата да ещё и с IS NULL?
... или ещё с утра "туплю"... :)
...
Рейтинг: 0 / 0
Помогите с запросом плиз !
    #38324955
Arhat109,

Это, что называется, LEFT ANTI JOIN ;)
В итоговую выборку берется лишь то, то не нашло себе пару в само-соединении. А условие соединение построено таким образом, что пару себе не найдет лишь запись с максимум.
...
Рейтинг: 0 / 0
Помогите с запросом плиз !
    #38324956
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - ЭхArhat109,

Это, что называется, LEFT ANTI JOIN ;)
В итоговую выборку берется лишь то, то не нашло себе пару в само-соединении. А условие соединение построено таким образом, что пару себе не найдет лишь запись (или записи) с максимум.

чуть поправил, если не возражаете.
...
Рейтинг: 0 / 0
Помогите с запросом плиз !
    #38324973
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.
create table test
  (
    id int,
    num int
  );

insert into test values(1,1);
insert into test values(1,2);
insert into test values(1,5);
--
insert into test values(2,4);
insert into test values(2,8);
insert into test values(2,9);
--
insert into test values(3,3);
insert into test values(3,7);
--
insert into test values(4,5);
insert into test values(4,6);

select *
  from test t0
  left join
       test t1
    on t0.id = t1.id
   and t0.num < t1.num
 where t1.id is null;

ID   NUM
--   ---
 1     5
 2     9
 3     7
 4     6

On-line проверка на sqlfiddle.com
...
Рейтинг: 0 / 0
Помогите с запросом плиз !
    #38325169
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - Эх,

пасибки... только я вопрос задал к тому что а простой агрегат, разве не решит туже самую задачу (отдать максимальные, с парами или без оных)?
... или выдирать гланды через ..опу да удаленно и по интернету, теперь модно? :)
...
Рейтинг: 0 / 0
Помогите с запросом плиз !
    #38325189
Arhat109,

туже самую задачу можно решить несколькими способами. почти все они описаны в Ф.А.К. выбор того или иного способа - дела личных предпочтений.
...
Рейтинг: 0 / 0
Помогите с запросом плиз !
    #38325203
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbc1. Запрос нормальный, это у вас нет индексов.
Обвязательно нужен индекс на Slave.masterID

+1
я б ещё "попробовал" :) индекс на 2-а поля {masterID, SlaveData}
...
Рейтинг: 0 / 0
Помогите с запросом плиз !
    #38325222
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arhat109Добрый Э - Эх,

пасибки... только я вопрос задал к тому что а простой агрегат, разве не решит туже самую задачу (отдать максимальные, с парами или без оных)?
... или выдирать гланды через ..опу да удаленно и по интернету, теперь модно? :)
для "заказанного" результата - не решит
ТСРезультат должен быть:

1,а,2,1,20
2,b,4,2,20

ID-шников из Slave не будет,
т.е. если с агрегированием, то это НЕ просто max/group by в джойне Master и Slave,
нужно или корр.подзапрос с агрег. в условии или джойн с подзапросом (дерив.тейблой) с агреггированием,
а это - "не факт", что лучше антиджойна ...
...
Рейтинг: 0 / 0
Помогите с запросом плиз !
    #38325662
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwerty112....т.е. если с агрегированием, то это НЕ просто max/group by в джойне Master и Slave,
нужно или корр.подзапрос с агрег. в условии или джойн с подзапросом (дерив.тейблой) с агреггированием,
а это - "не факт", что лучше антиджойна ...

В ФАК должна быть ссылка на предыдушие обсуждения с тестами.
Я испытывал несколько вариантов.
Антижоинт -- фактически картезиан внутри каждой группы.
Когда много груп но группы маленькие, то выигрывал анти-жоинт.
Когда мало груп но они большие -- агрегат выигрывал.
(Имеется ввиду что обшее количество записей одинаковое).
Точный момент когда меняется лидер зависит от конкретной ситуации.
...
Рейтинг: 0 / 0
Помогите с запросом плиз !
    #38325714
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwerty112,
:) вот вам ещё один вариант поиска с одной группировкой (не знаю, есть ли в факе, не смотрел):

Код: sql
1.
2.
3.
4.
5.
SELECT m.*
  , SUBSTRING_INDEX(MAX(CONCAT(s.SlaveData,'#',s.ID)),'#', -1) AS s_ID, m.ID AS s_MasterID, MAX(s.SlaveData) AS s_SlaveData
FROM MasterData AS m
JOIN SlaveData AS s ON s.MasterID = m.ID
GROUP BY m.ID
...
Рейтинг: 0 / 0
Помогите с запросом плиз !
    #38325720
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

Поскольку ищем максимальное, то пофиг "как" сравнивать... к тому же, при прочих равных этот вариант выдаст запись с последним s.ID... и не думаю, что "склеить/расклеить" стоит дороже чем подзапросы...
...
Рейтинг: 0 / 0
Помогите с запросом плиз !
    #38325728
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

кстати практически "оно": 7710123
...
Рейтинг: 0 / 0
Помогите с запросом плиз !
    #38325982
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109Arhat109,

кстати практически "оно": 7710123

Да, Яростный Меч показал имено эту идею.
Она 100% подходит для задач по лигике Т1 и Т3.
...
Рейтинг: 0 / 0
Помогите с запросом плиз !
    #38326054
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbc,

Ну и? Понятно что подходит... вопрос остался непонятным: "зачем этот гемморой с антиджойном рекомендовать новичкам?" :)
...
Рейтинг: 0 / 0
Помогите с запросом плиз !
    #38326215
Arhat109javajdbc,

Ну и? Понятно что подходит... вопрос остался непонятным: "зачем этот геммор р ой с антиджойном рекомендовать новичкам?" :)А новичку что не посоветуй - всё ему геморрой... И что теперь - ничего не советовать?
...
Рейтинг: 0 / 0
Помогите с запросом плиз !
    #38326216
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - Эх,

:) тоже верно. Так, это... посмотрел фак. Там же есть "всё" по сути... :)
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с запросом плиз !
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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