Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Не знаю как сделать запрос / 5 сообщений из 5, страница 1 из 1
19.05.2014, 18:51:03
    #38645626
alion23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не знаю как сделать запрос
Есть база:
Student( Sno ,Sname, Sex, Age, Department)
Course ( Cno , Cname, Pcno, Credit)
SC ( Sno, Cno , Grade)

В таблице Student
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Sno          sname                Sex  Age  Department
 001         Adam                   m   21  dept1                
 002         Lili                   f   20  dept2                
 003         Ron                    m   20  dept1                
 004         Shon                   m   22  dept2                
 005         James                  m   23  dept1                
 1002        Mike                   m   19  IS                   
 1003        Liu Gang               m   20  IS                   
 1006        Jone                   m   22  IS                   
    



В таблице Course
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
Cno    Cname                                   Pcno   Credit
 01     DataBase                                   06    4
 02     Embedded                                   07    5
 03     Network                                    07    6
 04     Chinese                                    04    4
 05     English                                    05    4
 06     Data Structure                             05    6
 07     Computer Arithmetics                       05    4



И в таблице SC (курсы, которые выбрал студент. есть студент что-то выбрал то в этой таблице есть запись)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
Sno          Cno  Grade
 001         01    90
 001         02    90
 002         01    92
 002         02    78
 003         03    90
 003         05    85
 1006        01    85
 1006        04    60



Задание на запрос: Показать студентов, которые выбрали точно такие же курсы как и студент, у которого Sno = '001'


Я сейчас вот на чем:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT  *  FROM 
(select cno, student.sname
from sc
full join student
on sc.sno=student.sno
where student.sno='001' ) a 
INNER JOIN (
select cno,student.sname
from sc
full join student
on sc.sno=student.sno ) b    
ON a.cno=b.cno;




Результатом являются и те студенты, которые выбрали хотя бы один из курсов 001го. А нужно точное совпадение.

Вот у меня еще и такой вариант есть, но результаты двух запросов одинаковые:

Код: plsql
1.
2.
3.
4.
5.
6.
SELECT distinct Sname
FROM   Student ,sc
WHERE student.sno = sc.sno and Cno  in
                  (SELECT Cno 
                   FROM  sc
                    WHERE sno = '001')



Прошу помочь, кто может!
...
Рейтинг: 0 / 0
20.05.2014, 05:01:28
    #38645853
Не знаю как сделать запрос
alion23,

задача на реляционное деление. решается через [not] exists подзапросы, либо на group by + having...
...
Рейтинг: 0 / 0
20.05.2014, 07:46:09
    #38645867
деление
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не знаю как сделать запрос
Добрый Э - Эх,
в пж можно ещё собрать курсы в (сортированные) array-и. и джойнится по ним.

хотя я не утверждаю, что так надо делать
...
Рейтинг: 0 / 0
20.05.2014, 10:26:01
    #38645993
alion23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не знаю как сделать запрос
Добрый Э - Эх,

group by и having я почти не понимаю. Результат не правильный - только 001й студент. И с exists так же.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
select sname,cno
from student, sc
where student.sno=sc.sno
group by student.sno, sc.cno
having sc.cno in (SELECT Cno 
                 FROM  sc
                 WHERE sc.sno=student.sno and sno = '001')




Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select student.sname
 from student
 where exists 	(select cno
		from sc
		where sc.sno=student.sno and exists 
		(SELECT Cno 
                 FROM  sc
                 WHERE sc.sno=student.sno and sno = '001'));
...
Рейтинг: 0 / 0
20.05.2014, 10:31:46
    #38646006
alion23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не знаю как сделать запрос
деление,

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


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