Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / MySQL Новый топик    Ответить
 Помогите с запросом  [new]
andryus
Member

Откуда:
Сообщений: 3
Есть две талибцы:
1. TABLE1 поля
-id
-idchet
-fio
2. TABLE2 поля
-idtable1
-data1
-data2

ЗНАЧЕНИЯ
TABLE1:
id=1
idchet=123
fio=Иванов Иван Иванович
id=2
idchet=123
fio=Петров Петр Петрович
id=3
idchet=124
fio=Сидоров Петр Петрович


TABLE2:
idtable1=1
data1=01.05.2021
data2=02.05.2021
idtable1=1
data1=03.05.2021
data2=04.05.2021
idtable1=1
data1=04.05.2021
data2=05.05.2021

idtable1=2
data1=01.06.2021
data2=02.06.2021
idtable1=2
data1=03.06.2021
data2=04.06.2021
idtable1=2
data1=04.06.2021
data2=05.06.2021

УСЛОВИЕ:
idchet=123
TABLE1.id=TABLE2.idtable1

ЗАДАЧА
Выбрать минимальную data1 и максимальную data2 у Иванов Иван Иванович (id=1) и Петров Петр Петрович (id=2)

PS Сидоров Петр Петрович (id=3) jотпадает так как не срабатывает условие idchet=123

Большое спасибо за помощь в скрипте.
2 май 21, 23:08    [22317658]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
FreeAdman
Member

Откуда:
Сообщений: 158
1. Приводите таблицы в нормальный, читабельный вид. Сложно?

TABLE1:
id idchet fio
1 123 Иванов Иван Иванович
2 123 Петров Петр Петрович
3 124 Сидоров Петр Петрович


TABLE2:
idtable1 data1 data2
1 01.05.2021 02.05.2021
1 03.05.2021 04.05.2021
1 04.05.2021 05.05.2021
2 01.06.2021 02.06.2021
2 03.06.2021 04.06.2021
2 04.06.2021 05.06.2021


2. Описывайте типы данных в таблице. Сложно? Будем считать, что у вас timestamp.

3. Ваше "УСЛОВИЕ" как-то противоречит "ЗАДАНИЮ". Вам "idchet=123" или "id=1 и id=2"? Или "idchet=123 и id=1 и id=2"? Формулируйте нормально.

Ну вот как-то так:
SELECT `t1`.`id`, `t1`.`idchet`, `t1`.`fio`, MIN(`t2`.`data1`) AS `mindata`, MAX(`t2`.`data2`) AS `maxdata`
FROM `table1` AS `t1`
LEFT JOIN `table2` AS `t2` ON `t1`.`id`=`t2`.`idtable1`
WHERE `t1`.`idchet`='123' GROUP BY `t1`.`id`


Результат:
id idchet fio mindata maxdata
1123Иванов Иван Иванович2021-05-01 00:00:002021-05-05 00:00:00
2123Петров Петр Петрович2021-06-01 00:00:002021-06-05 00:00:00


Сообщение было отредактировано: 3 май 21, 05:20
3 май 21, 05:23    [22317705]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
FreeAdman
Member

Откуда:
Сообщений: 158
Забавно. "Новичок" за 1 год так и не научился ничему. Только темы создаёт чтобы за него всё делали
10 май 21, 09:40    [22320017]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Alex_Ustinov
Member

Откуда: Nickel
Сообщений: 3799
в данном случае получим JOIN, не LEFT JOIN
11 май 21, 00:38    [22320226]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
FreeAdman
Member

Откуда:
Сообщений: 158
Alex_Ustinov,
из-за MIN(), MAX() ?

Сообщение было отредактировано: 11 май 21, 09:57
11 май 21, 10:04    [22320285]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Alex_Ustinov
Member

Откуда: Nickel
Сообщений: 3799
FreeAdman,

из-за WHERE
11 май 21, 17:23    [22320557]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
FreeAdman
Member

Откуда:
Сообщений: 158
Alex_Ustinov,
чушь какая-то. С чего это вдруг ? WHERE - условие выборки с первой таблицы

Сообщение было отредактировано: 11 май 21, 18:26
11 май 21, 18:35    [22320586]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21181
FreeAdman
чушь какая-то. С чего это вдруг ? WHERE - условие выборки с первой таблицы
Не понял - лучше переспроси.

TABLE1.id=TABLE2.idtable1, помещённое во WHERE, немедленно превращает LEFT JOIN table2 в неподходящее INNER JOIN table2.
11 май 21, 19:48    [22320627]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
FreeAdman
Member

Откуда:
Сообщений: 158
Akina
FreeAdman
чушь какая-то. С чего это вдруг ? WHERE - условие выборки с первой таблицы
Не понял - лучше переспроси.

TABLE1.id=TABLE2.idtable1, помещённое во WHERE, немедленно превращает LEFT JOIN table2 в неподходящее INNER JOIN table2.


А где вы увидели в "WHERE `t1`.`idchet`='123'" — TABLE1.id=TABLE2.idtable1 ?
12 май 21, 07:49    [22320743]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Alex_Ustinov
Member

Откуда: Nickel
Сообщений: 3799
FreeAdman,

на пальцах:
LEFT JOIN - создан для "показа" всей "левой таблицы" с приклеенными элементами "правой таблицы" (там где они есть, где нет - NULL).
в ON - условиЯ соединения правой таблицы, это условие не "подрезает" левую таблицу ни в коем случае.

WHERE работает (условно) в самом конце, подрезает левую таблицу по условию `t1`.`idchet`='123'
в рез-те мы не увидим записи с idchet=124, получаем то же самое что и с INNER JOIN

Запрос с LEFT JOIN + WHERE даст тот же результат, но даже по условию задачи он НЕ НУЖЕН

можно поиграться здесь -> https://dbfiddle.uk/?rdbms=mysql_8.0 если под рукой нет MySQL.
посмотреть что даст в результате запрос с WHERE `t1`.`idchet`='123' и без него, с INNER и LEFT JOIN.
На бумаге иногда это затруднительно увидеть
12 май 21, 08:52    [22320751]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21181
FreeAdman
А где вы увидели в "WHERE `t1`.`idchet`='123'" — TABLE1.id=TABLE2.idtable1 ?
Да в самом первом сообщении:
andryus
УСЛОВИЕ:
idchet=123
TABLE1.id=TABLE2.idtable1
12 май 21, 09:46    [22320768]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
FreeAdman
Member

Откуда:
Сообщений: 158
Akina
FreeAdman
А где вы увидели в "WHERE `t1`.`idchet`='123'" — TABLE1.id=TABLE2.idtable1 ?
Да в самом первом сообщении:
andryus
УСЛОВИЕ:
idchet=123
TABLE1.id=TABLE2.idtable1

Голову включите, уважаемый. Автор сам не понимает что ему нужно и фантазирует условия.
Я в своём сообщении написал, что его ЗАДАЧА противоречит УСЛОВИЮ. Это если культурно объяснить

Сообщение было отредактировано: 12 май 21, 10:15
12 май 21, 10:17    [22320789]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
FreeAdman
Member

Откуда:
Сообщений: 158
Alex_Ustinov,
ну, можно и INNER. Только если даты в БД не будет, INNER ничего не вернёт.

А вообще, пусть автор разбирается

Сообщение было отредактировано: 12 май 21, 10:16
12 май 21, 10:25    [22320795]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21181
FreeAdman
Автор сам не понимает что ему нужно и фантазирует условия.
Я в своём сообщении написал, что его ЗАДАЧА противоречит УСЛОВИЮ.
Упс... а мне чёта показалось, что это ты автор... тады сорри.
12 май 21, 12:48    [22320914]     Ответить | Цитировать Сообщить модератору
Все форумы / MySQL Ответить