Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » SQL запрос

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

Shurshunchik007



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Даны три таблицы:
1. Id,F,I,O - студенты
2. Id,F,I,O - отчисляемые студенты
3. Id,Sigma(стипендия) - в этой таблице возможно кучу строк с одним Id, которые нужно просумировать.
 
Надо получить Id,F,I,O, совпадающие в 1-ой и во 2-ой таблице и вывести суммированную стипендию по совпадающим Id.

Всего записей: 59 | Зарегистр. 14-05-2005 | Отправлено: 23:42 01-06-2005
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Что-то вроди
SELECT Table1.ID, Table1.F, Table1.I, Table1.O, Sum(Table3.Sigma) AS SumOfSigma
FROM Table3 INNER JOIN (Table2 LEFT JOIN Table1 ON Table2.ID = Table1.ID) ON Table3.ID = Table2.ID
WHERE ((([Table1]![ID])=[Table2]![ID]))
GROUP BY [Table3]![ID]
HAVING ((([Table3]![ID])=[Table2]![ID]))

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 01:06 02-06-2005
Shurshunchik007



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dneprcomp

Цитата:
FROM Table3 INNER JOIN (Table2 LEFT JOIN Table1 ON Table2.ID = Table1.ID) ON Table3.ID = Table2.ID

Что-то не врубился! Можете объяснить? И можно ли как-нибудь проще. Например, просто с подчиненным запросом? А то INNER JOIN... не понимаю...

Всего записей: 59 | Зарегистр. 14-05-2005 | Отправлено: 08:23 02-06-2005
evle



1 + int rand(100);
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Shurshunchik007
Две таблицы одной структуры - это плохо. Лучше соединить их в одну и добавить булевое поле: отчислен/не отчислен. Тогда и запрос проще получится и логичнее будет.

----------
For every complex problem, there is a solution that is simple, neat, and wrong.

Всего записей: 2110 | Зарегистр. 03-02-2005 | Отправлено: 10:10 02-06-2005
Shurshunchik007



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
evle
Согласен, но я не имеею права их соединять, что-либо вообще делать с таблицами по заданию.

Всего записей: 59 | Зарегистр. 14-05-2005 | Отправлено: 10:20 02-06-2005
sunduk4

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А на чем база?

Всего записей: 177 | Зарегистр. 03-04-2004 | Отправлено: 13:31 02-06-2005
Sleepwalker



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
прикольная задача...  
 
на Jet-SQL такой запрос получился (конструктором за 1 минуту
тебе же только сумму вывести надо?
 
SELECT Sum([table3]![Sigma])
FROM table3 INNER JOIN (table1 INNER JOIN table2 ON table1.ID = table2.ID) ON (table3.ID = table1.ID) AND (table3.ID = table2.ID);
 
кстати, ID в таблицах совпадают? т.е. Вася Пупкин и в первой и во второй имеет один и тот же ID?
и еще.. отдельный прикол назвать поле ID, т.к. в MSSQL это зарезервированное слово, например...  
 
dneprcomp
у меня твой запрос не выполнился...

Всего записей: 1957 | Зарегистр. 19-10-2002 | Отправлено: 17:48 02-06-2005
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sleepwalker

Цитата:
кстати, ID в таблицах совпадают? т.е. Вася Пупкин и в первой и во второй имеет один и тот же ID?  

А как они могут не совпадать, если это ключевые поля? Надо же как то связи устанавливать.
Цитата:
отдельный прикол назвать поле ID
А в Accesse нет. Ну и что? Надо применяться к синтаксису используемой базы.
Цитата:
у меня твой запрос не выполнился...
А я и не обещал, что будет немедленно исполняться. Да еще и во всевозможных базах. Я же писал
Цитата:
Что-то вроди


Цитата:
SELECT Sum([table3]![Sigma])...  
Запрос не полон. Не соответствует условию, т.к. не выбраны все нужные поля. Кроме того, сумма не считается с учетом группировки по ID(опять же по условию).
Shurshunchik007

Цитата:
А то INNER JOIN... не понимаю
А ты в хелп загляни JOIN - это связка таблиц. Связи могут быть по разным правилам. INNER это правило, определяющее, что ключевое поле должно быть одинаковым в обоих таблицах.
 
Исправлено:
 
SELECT Table3.ID, Table1.F, Table1.F, Table1.I, Table1.O, Sum(Table3.Sigma) AS SumOfSigma
FROM (Table3 INNER JOIN Table2 ON Table3.ID = Table2.ID) INNER JOIN Table1 ON Table2.ID = Table1.ID
GROUP BY [Table3]![ID], Table3.ID, Table1.F, Table1.F, Table1.I, Table1.O
 
 
 
 

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 20:45 02-06-2005 | Исправлено: dneprcomp, 20:48 02-06-2005
Shurshunchik007



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Это все хорошо... про INNER JOIN понял...  
Но у меня вот так заработало (может криво, но тогда объясните почему):

Цитата:
 
select b.ID,F,I,O,sum(SIGMA)
from Table1 A,Table3 B
where A.ID IN (SELECT ID FROM Table2) AND A.ID=B.Id
Group by B.ID,F,I,O
 

 
Кроме того... все это под FireBird и названия таблиц с полными названиями полей я опустил или упростил их...

Всего записей: 59 | Зарегистр. 14-05-2005 | Отправлено: 00:34 03-06-2005
Sleepwalker



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Shurshunchik007
а таблицу отчисляемых куда дел? потерял?
 
dneprcomp
а ты выполни мой запрос и посмотри.. он соответствует условиям задачи. твой же вообще не выполняется впрочем, это твои заботы

Всего записей: 1957 | Зарегистр. 19-10-2002 | Отправлено: 00:55 03-06-2005
Shurshunchik007



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sleepwalker

Цитата:
а таблицу отчисляемых куда дел?  потерял?  

 
Нет все на месте:
where A.ID IN (SELECT ID FROM Table2) AND A.ID=B.Id

Всего записей: 59 | Зарегистр. 14-05-2005 | Отправлено: 01:08 03-06-2005 | Исправлено: Shurshunchik007, 01:09 03-06-2005
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sleepwalker
Да нет, это не мои заботы и даже не твои . Это Shurshunchik007 заботы. А выполнять твой запрос не требуется. Достаточно посмотреть, что ты запрашиваешь показать. Shurshunchik007 просил показать все поля, а в твоем Select я вижу только Sum. Вот мне и интересно, каким образом это соответствует "техзаданию". Да и с вот этой фразой
Цитата:
в этой таблице возможно кучу строк с одним Id, которые нужно просумировать
тоже не понятно. В твоем запросе я не вижу запрошенной группировки по ID. Правда, может я фразу несколько не так понял. Ну, это уже дело Shurshunchik007, выбратьто, что больше подходит. Кстати, мой второй селект РАБОТАЕТ  . В Access. Вот возьми и сам выпони и посмотри.
PS. Вот взял и выполнил твой. Все как я и говорил. Кроме поля суммы по всем ID сразу ничего не показывает.  
 
 
 
Добавлено:
Shurshunchik007

Цитата:
 все это под FireBird и названия таблиц с полными названиями полей я опустил или упростил их
FireBird не знаю. Может попробовать не упрощать?
 
Добавлено:

Цитата:
select b.ID,F,I,O,sum(SIGMA)

По моему у тебя FireBird путает с какой таблицы что брать. У тебя по условию не может быть полей F,I,O в таблице с сигмой.

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 20:54 03-06-2005
Shurshunchik007



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dneprcomp

Цитата:
По моему у тебя FireBird путает с какой таблицы что брать. У тебя по условию не может быть полей F,I,O в таблице с сигмой.

Он автоматически же ищет поля, т.е. в таблице с сигмой нет полей F,I,O, и поэтому он берет их из другой таблицы.

Цитата:
Может попробовать не упрощать?

Ничего не даст... Только запутает...

Всего записей: 59 | Зарегистр. 14-05-2005 | Отправлено: 22:55 03-06-2005 | Исправлено: Shurshunchik007, 23:33 03-06-2005
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Shurshunchik007

Цитата:
Он автоматически же ищет поля, т.е. в таблице с сигмой нет полей F,I,O, и поэтому он берет их из другой таблицы
Ну, ну... Тебе видней

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 00:13 04-06-2005
Shurshunchik007



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вроде так... Или все-таки нет? А dneprcomp?
Вроде выводит правильно... или на глюке работает?

Всего записей: 59 | Зарегистр. 14-05-2005 | Отправлено: 00:35 04-06-2005
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Shurshunchik007

Цитата:
Вроде выводит правильно... или на глюке работает

Не берусь судить FireBird. Но спрошу.  
Как по твоему произойдет выборка, если у тебя поле О в разных таблицах будет иметь разную информацию? Это вполне возможная ситуация, т.к. О не является связующим полем(ключевым).  
Из какой таблицы FireBird "автоматически" выберет данные?  
И будут ли это те данные, что ты надеялся получить?

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 04:01 04-06-2005
Shurshunchik007



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dneprcomp

Цитата:
если у тебя поле О в разных таблицах будет иметь разную информацию

Такого быть не может... Таблица строилась по ID (уникальный номер для каждого человека)...

Цитата:
Из какой таблицы FireBird "автоматически" выберет данные?  

Из той таблици где есть эти поля...
Ведь в таблице Table1 поля ID,F,I,O,
а в таблице Table3 поля ID,SIGMA
В строке  

Код:
 
select b.ID,F,I,O,sum(SIGMA)
 

Объявлены b.ID, т.е. Table3.ID, так как и в таблице Table1 существует поле ID...
А поля F,I,O существуют только в Table1  и поэтому они объявленны без имени самой таблицы... Аналогично с SIGMA только относительно Table3...

Всего записей: 59 | Зарегистр. 14-05-2005 | Отправлено: 14:57 04-06-2005 | Исправлено: Shurshunchik007, 14:58 04-06-2005
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Shurshunchik007

Цитата:
Даны три таблицы:  
1. Id,F,I,O - студенты  
2. Id,F,I,O - отчисляемые студенты  
3. Id,Sigma(стипендия) - в этой таблице возможно кучу строк с одним Id, которые нужно просумировать
Это ты писал. Не я!.
Цитата:
Ведь в таблице Table1 поля ID,F,I,O,  
а в таблице Table3 поля ID,SIGMA  
Да в таком запросе, как ты написал это может проскочить. А если надо будет выбрать что-то и из таблицы 2?

Цитата:
Цитата:если у тебя поле О в разных таблицах будет иметь разную информацию
 

Цитата:
Такого быть не может... Таблица строилась по ID  
ID действительно должен быть уникален. А вот поле О совсем даже нет и может содержать совершенно разные данные. Кроме того, несмотря на уникальность поля ID, возможна следующая ситуация
Цитата:
3. Id,Sigma(стипендия) - в этой таблице возможно кучу строк с одним Id
Сколько раз и из какой таблицы будет произведена выборка?
Может в такого типа запросе, как ты имеешь сейчас все и будет проскакивать. Впрочем решать тебе.
 
 
 
Добавлено:
Зайди в http://forum.ru-board.com/topic.cgi?forum=33&topic=5331#1
Там YurikGL книгу предлогает: "Понимание SQL".
 

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 06:09 05-06-2005
Shurshunchik007



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да! Я тебя понял... Просто ты в более глобальном смысле имел ввиду... А я про пример свой... На ссылочку обязательно зайду... Большое спасибо за помощь!!!
 
Добавлено:
Да! Я тебя понял... Просто ты в более глобальном смысле имел ввиду... А я про пример свой... На ссылочку обязательно зайду... Большое спасибо за помощь!!!

Всего записей: 59 | Зарегистр. 14-05-2005 | Отправлено: 19:49 05-06-2005
PowerChute



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Del

Всего записей: 519 | Зарегистр. 13-10-2004 | Отправлено: 15:51 16-02-2024 | Исправлено: PowerChute, 15:52 16-02-2024
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » SQL запрос


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru