Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Объединение таблиц / 16 сообщений из 16, страница 1 из 1
21.12.2015, 15:29:18
    #39133251
sergey170481
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
Здравствуйте.
Есть две таблицы:

T1
|ФИО|
Иванов
Петров
Сидоров

T2
|ФИО|ПРЕМИЯ|
Иванов|100
Петров|200
Иванов|300
Иванов|100

Нужно получить следующее:
|ФИО|СУММА
Иванов|500
Петров|200
Сидоров|0

Т.е сделать запрос к первой таблице (с какими-то своими условиями), а затем
дополнить суммами из второй таблицы.

Подскажите в каком направлении двигаться.
Заранее спасибо.
...
Рейтинг: 0 / 0
21.12.2015, 15:49:34
    #39133298
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
sergey170481в каком направлении двигаться
В направлении RTFM.
В данном конкретном случае - по LEFT JOIN, GROUP BY и SUM().
...
Рейтинг: 0 / 0
22.12.2015, 07:26:08
    #39134056
sergey170481
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
Akinaпо LEFT JOIN, GROUP BY и SUM().
Да, это понятно. Но не могу пока построить запрос.
Дело в том, что у меня в первом запросе несколько таблиц участвует.
Буду соображать дальше...
...
Рейтинг: 0 / 0
22.12.2015, 08:41:45
    #39134101
sergey170481
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
sergey170481Буду соображать дальше...
Пытаюсь делать так, результат получается обрезанный.
Код: sql
1.
2.
3.
4.
5.
SQL.Add('SELECT s.FIO,t.*,s.ID,SUM(p.CASH)');
SQL.Add('from sotrud as s,tabeli as t');
SQL.Add('LEFT JOIN premium p ON p.ID_FIO=t.ID_FIO');
SQL.Add('WHERE t.ID_FIO=s.ID);
SQL.Add('GROUP BY p.ID_FIO');



Если убираю LEFT JOIN - результат хороший, полный.
Добавляю - срезается.
Как исправить?
...
Рейтинг: 0 / 0
22.12.2015, 08:44:26
    #39134105
sergey170481
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
Т.е то, чего нет в таблице "p" нет и в результирующей.
...
Рейтинг: 0 / 0
22.12.2015, 09:03:51
    #39134120
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
sergey170481Есть две таблицы

sergey170481Пытаюсь делать так, результат получается обрезанный.
Код: sql
1.
2.
3.
SQL.Add('SELECT s.FIO,t.*,s.ID,SUM(p.CASH)');
SQL.Add('from sotrud as s,tabeli as t');
SQL.Add('LEFT JOIN premium p ON p.ID_FIO=t.ID_FIO');


Кто из нас считать не умеет?
...
Рейтинг: 0 / 0
22.12.2015, 09:42:28
    #39134146
sergey170481
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
AkinaКто из нас считать не умеет?
Согласен. Я для упрощения так писал.
Сделал вложенный SELECT и получилось две таблицы.
Причина в этом? Не могу разобраться.
Вот так ещё делал:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SQL.Add('SELECT qq.*,SUM(p.CASH)');
SQL.Add('FROM (');
SQL.Add('SELECT sotrud.FIO,tabeli.*,sotrud.ID as sid');
SQL.Add('from tabeli,sotrud');
SQL.Add('WHERE sotrud.ID=tabeli.ID_FIO');
SQL.Add('ORDER BY sotrud.FIO) as qq');
SQL.Add('LEFT JOIN premium p ON p.ID_FIO=qq.ID_FIO');
SQL.Add('GROUP BY p.ID_FIO');



В итоге получается две таблицы - 'qq' и 'p'?
Но в результате всё равно только то, что в 'p'
...
Рейтинг: 0 / 0
22.12.2015, 09:44:11
    #39134149
sergey170481
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
Как будто он GROUP BY выполнил и выдал только то, что сгруппировал, откинув всё остальное.
...
Рейтинг: 0 / 0
22.12.2015, 12:13:52
    #39134327
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
sergey170481 , размещайте тут ТОЛЬКО текст запроса, а не код его формирования на хрен знает каком языке.
...
Рейтинг: 0 / 0
22.12.2015, 14:24:25
    #39134595
sergey170481
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
AkinaТОЛЬКО текст запроса
Понял, исправлюсь (Delphi если что).
...
Рейтинг: 0 / 0
22.12.2015, 14:51:42
    #39134662
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
sergey170481Понял
Это хорошо.

sergey170481исправлюсь
Ок, исправляйся.
Давай НАСТОЯЩУЮ структуру (в форме проверенных и работающих CREATE TABLE) и тестовое наполнение (в форме проверенных и работающих INSERT), формулируй цель и желаемый результат на именно этих данных.
...
Рейтинг: 0 / 0
22.12.2015, 15:10:45
    #39134701
sergey170481
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
Итак. Таблицы уже созданы и их три.

1 - sotrud (ID,FIO...)
2 - tabeli (ID,ID_FIO,...)
3 - premium (ID,ID_FIO,CASH,...)

Этот запрос работает:
Код: sql
1.
2.
3.
4.
SELECT sotrud.FIO,tabeli.*
FROM tabeli,sotrud
WHERE sotrud.ID=tabeli.ID_FIO
ORDER BY sotrud.FIO


возвращает результирующую таблицу как надо. Далее мне нужно в этот результат проставить суммы из третьей таблицы по совпадению ID_FIO.
Пробовал так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT tbl.*,SUM(p.CASH)
FROM (SELECT sotrud.FIO,tabeli.*
          FROM tabeli,sotrud
          WHERE sotrud.ID=tabeli.ID_FIO
          ORDER BY sotrud.FIO) as tbl
LEFT JOIN premium p ON p.ID_FIO=qq.ID_FIO
GROUP BY p.ID_FIO


В итоге запрос мне оставляет только те данные, по которым есть информация в третьей таблице (премиум).
Вопрос. Как оформить запрос, чтобы все данные из первого запроса (под запроса)
оставались на местах, а недостающие заполнялись NULLами?
...
Рейтинг: 0 / 0
22.12.2015, 15:13:09
    #39134703
sergey170481
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
sergey170481
[/src]
ORDER BY sotrud.FIO) as tbl
LEFT JOIN premium p ON p.ID_FIO= tbl .ID_FIO // здесь tbl конечно, ошибся
GROUP BY p.ID_FIO
[/src]
...
Рейтинг: 0 / 0
22.12.2015, 15:14:52
    #39134708
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
AkinaДавай НАСТОЯЩУЮ структуру ( в форме проверенных и работающих CREATE TABLE )
и тестовое наполнение ( в форме проверенных и работающих INSERT ),
формулируй цель и желаемый результат на именно этих данных .
...
Рейтинг: 0 / 0
22.12.2015, 15:22:40
    #39134718
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
sergey170481Вопрос. Как оформить запрос, чтобы все данные из первого запроса (под запроса)
оставались на местах, а недостающие заполнялись NULLами?внимательно посмотреть, по полю какой таблицы производится группировка.
...
Рейтинг: 0 / 0
22.12.2015, 16:00:32
    #39134758
sergey170481
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
tanglirвнимательно посмотреть, по полю какой таблицы производится группировка
Спасибо вам большое! В очередной раз убеждаюсь, что в большинстве случаев
вопрос долго решается по причине неповоротливости сознания.
Сидело у меня в голове, что GROUP BY обязательно должен относиться к таблице для которой используется SUM.
Самоучка я.
Исправил последнюю строчку на:
Код: sql
1.
GROUP BY tbl.ID_FIO


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


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