IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> SQL несколько LEFT join ?
сообщение
Сообщение #1


Знаток
****

Группа: Пользователи
Сообщений: 396
Пол: Мужской

Репутация: -  9  +


сдраствуйте например есть таблицаЖ

студенты
-математика
-физика
-чистописание
-пение
-музыка

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

------------- математика--------физика----------чистописание
---------------------------------------------------------------------
иванов -----------5--------------- - --------------------3--------
---------------------------------------------------------------------
петров-------------6---------------7-------------------- - -------
для одной подчиненной таблицы LEFT JOIN нормально делает а больше начинает множить записи...
как правильно делать
я пробую

users LEFT JOIN (мат LEFT JOIN физ LEFT JOIN чист) on users.id

Сообщение отредактировано: Rian -


--------------------
Objective-C, Unity3d
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Еще раз: сколько у тебя таблиц и как они связаны? На каждый предмет своя таблица, и во всех есть поле ID? Тогда так:

SQL
SELECT users.name, math.mark, physics.mark, russian.mark
FROM ((users LEFT JOIN math ON users.ID = math.ID) LEFT JOIN physics ON users.ID = physics.ID)
LEFT JOIN russian ON users.ID = russian.ID;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Знаток
****

Группа: Пользователи
Сообщений: 396
Пол: Мужской

Репутация: -  9  +


Цитата(volvo @ 14.04.2011 16:08) *

Еще раз: сколько у тебя таблиц и как они связаны? На каждый предмет своя таблица, и во всех есть поле ID?


Код

'SELECT first_n, last_n, SUM(math.mark) as math, SUM(phis.mark)as phis, SUM(log.mark)as log  '+
        'FROM((users LEFT JOIN math ON users.id = math.user_id) '+
          'LEFT JOIN phis ON users.id = phis.user_id) '+
            'LEFT JOIN log ON users.id = log.user_id '+
        'GROUP BY users.id ';


...если правильно понял, но
первая добавляется нормально, а все остальные начинают множить записи

ЗЫ одна таблица студенты и к ней подключется еще 3 таблицы с оценками (по каждому предмету)
а в каждой из них оценки по темам за весь год


--------------------
Objective-C, Unity3d
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Знаток
****

Группа: Пользователи
Сообщений: 396
Пол: Мужской

Репутация: -  9  +


а можно сделать соединить строки после UNION???

например

(user LEFT JOIN math
UNION
user LEFT JOIN phis
UNION
user LEFT JOIN log)
group by user.id

...сделал подзапрос, если вариант без union покороче есть буду рад

Сообщение отредактировано: Rian -


--------------------
Objective-C, Unity3d
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Ничего нигде не множится (запрос - буква в букву из моего первого ответа)...


Эскизы прикрепленных изображений
Прикрепленное изображение
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Знаток
****

Группа: Пользователи
Сообщений: 396
Пол: Мужской

Репутация: -  9  +


Цитата(volvo @ 15.04.2011 12:20) *

Ничего нигде не множится (запрос - буква в букву из моего первого ответа)...

а если оценок много и их нуна сложить или вычислить среднюю?


--------------------
Objective-C, Unity3d
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Где-то в вопросе было указано про сложение или вычисление среднего? Не было. Даже если так. Вот так - все оценки по пользователям суммируются:

SQL
SELECT users.name, Sum(math.mark) AS SumOfmark, Sum(physics.mark) AS SumOfmark1,
Sum(russian.mark) AS SumOfmark2
FROM ((users LEFT JOIN math ON users.ID = math.userID) LEFT JOIN russian ON users.ID = russian.userID)
LEFT JOIN physics ON users.ID = physics.userID
GROUP BY users.name;

Где множит записи?
Прикрепленное изображение

Вот так - среднее:
SQL
SELECT users.name, Avg(math.mark) AS AvgOfmark, Avg(physics.mark) AS AvgOfmark1,
Avg(russian.mark) AS AvgOfmark2
FROM ((users LEFT JOIN math ON users.ID = math.userID) LEFT JOIN russian ON users.ID = russian.userID)
LEFT JOIN physics ON users.ID = physics.userID
GROUP BY users.name;
Опять множит?
Прикрепленное изображение
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Знаток
****

Группа: Пользователи
Сообщений: 396
Пол: Мужской

Репутация: -  9  +


вроде должно...
у меня каша...
я подумаю


--------------------
Objective-C, Unity3d
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 24.12.2024 0:59
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name