Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите решить задачку / 24 сообщений из 24, страница 1 из 1
28.05.2020, 20:43
    #39963616
hyper9
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачку
Реализуйте запросы используя только декартово произведение (без подзапросов и JOIN):
Имя, пользователя, который подключен к дисциплинам и с ролью студента и с ролью преподавателя.

Таблица:
http://prntscr.com/spkn6c
http://prntscr.com/spknqi

Вот мой код
Код: plsql
1.
2.
3.
4.
5.
SELECT namE
FROM user_and_disc, users
WHERE user_and_disc.user_id = users.user_id
GROUP BY user_and_disc.user_id, name
HAVING COUNT(*) = 2



Комментарий преподователя:
Перепишите запрос: только произведение таблиц. Никаких Count.
...
Рейтинг: 0 / 0
29.05.2020, 05:36
    #39963839
oragraf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачку
hyper9,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
drop table u purge;
drop table d purge;
create table u (user_id number primary key, name varchar2(100));
create table d (user_id number, dis_id number, role_name varchar2(100), constraint d_pk primary key (user_id, dis_id, role_name));
insert into u values (1,'Кузовков');
insert into u values (2,'Пузиков');
insert into d values (2,2,'student');
insert into d values (2,1,'tutor');
insert into d values (1,1,'student');

select d1.role_name, d2.role_name, s.name
  from u s
        cross join d d1
        cross join u t 
        cross join d d2
where 
        d1.user_id = s.user_id and d1.role_name = 'student'
    and t.user_id = s.user_id 
    and t.user_id = d2.user_id and d2.role_name = 'tutor';
...
Рейтинг: 0 / 0
29.05.2020, 10:07
    #39963888
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачку
oragraf,

(без подзапросов и JOIN )

....
stax
...
Рейтинг: 0 / 0
29.05.2020, 10:13
    #39963891
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачку
hyper9
Реализуйте запросы используя только декартово произведение (без подзапросов и JOIN):

тут какой-то подвох
декартово произведение без JOIN

масло не маслянистое

.....
stax
...
Рейтинг: 0 / 0
29.05.2020, 10:41
    #39963912
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачку
hyper9
Реализуйте запросы используя только декартово произведение без JOIN


XML разрешен (проходили) ?

.....
stax
...
Рейтинг: 0 / 0
29.05.2020, 11:00
    #39963930
watson
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачку
Код: plsql
1.
2.
3.
select name
from t1, t2;
/



Если явно не указывать условие WHERE (edit: либо условие JOIN), то это и будет CROSS JOIN (декартово произведение).
...
Рейтинг: 0 / 0
29.05.2020, 11:03
    #39963933
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачку
Код: plsql
1.
and t.user_id = s.user_id 



Это (сюрприз!) тоже JOIN, только без слова JOIN.
...
Рейтинг: 0 / 0
29.05.2020, 11:06
    #39963936
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачку
watson,

imxo

from t1, t2; это JOIN

.....
stax
...
Рейтинг: 0 / 0
29.05.2020, 11:37
    #39963952
hyper9
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачку
Stax,
Да, тут разрешено все, только что бы ее решить))
...
Рейтинг: 0 / 0
29.05.2020, 12:23
    #39963987
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачку
hyper9
Stax,
Да, тут разрешено все, только что бы ее решить))


1) from t1, t2 - запрещено (JOIN) ?
2) count запрещено (непонятно почему)?

зы
странное требование декартово произведение без JOIN

тоесть декартово произведение должно быть, а JOIN запрещен

.....
stax
...
Рейтинг: 0 / 0
29.05.2020, 13:10
    #39964035
oragraf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачку
Stax,

Ты же понимаешь, что если таблиц более одной, то join есть. А как он на бумаге оформлен будет - через oracle-синтаксис или анси - неважно.
...
Рейтинг: 0 / 0
29.05.2020, 13:45
    #39964064
exciter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачку
oragraf,

Возможно, преподаватель просто не хочет видеть ANSI-синтаксис

авторКомментарий преподователя:
Перепишите запрос: только произведение таблиц

Иначе непонятно, что он имеет в виду под "произведением таблиц"
...
Рейтинг: 0 / 0
29.05.2020, 15:52
    #39964146
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачку
hyper9
Реализуйте запросы используя только декартово произведение (без подзапросов и JOIN):
Имя, пользователя, который подключен к дисциплинам и с ролью студента и с ролью преподавателя.

Таблица:
http://prntscr.com/spkn6c
http://prntscr.com/spknqi

Вот мой код
Код: plsql
1.
2.
3.
4.
5.
SELECT namE
FROM user_and_disc, users
WHERE user_and_disc.user_id = users.user_id
GROUP BY user_and_disc.user_id, name
HAVING COUNT(*) = 2



Комментарий преподователя:
Перепишите запрос: только произведение таблиц. Никаких Count.


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT namE
FROM  users u
WHERE 
Exists(
   Select Null
   From user_and_disc ud1
         , user_and_disc ud2   -- вот здесь только произведение 
   Where 
       ud1.user_id = u.user_id
And ud2.user_id = u.user_id
And ud1.user_role = 'Student'
And ud2.user_role = 'Tutor'
)
...
Рейтинг: 0 / 0
29.05.2020, 15:54
    #39964147
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачку
booby,


картинки не смотрел...
...
Рейтинг: 0 / 0
29.05.2020, 15:56
    #39964148
MakeSure
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачку
Вопрос очень странный, мне кажется, что проблема в постановке вопроса.
Смутное ощущение, что препод считает, что сначала происходит декартово произведение, а потом фильтрация, если ты не используешь ANSI JOIN.
Остается только догадываться, что преподаватель хочет, но возможно, что он ожидает увидеть что-то такое:
Код: plsql
1.
2.
3.
4.
5.
select distinct b1.user_id
  from user_and_disc b1
      ,user_and_disc b2
 where b1.role_name != b2.role_name
   and b1.user_id = b2.user_id
...
Рейтинг: 0 / 0
29.05.2020, 16:13
    #39964161
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачку
exciter
oragraf,

Возможно, преподаватель просто не хочет видеть ANSI-синтаксис


непонятно что хочет

зачем тут декартово?
почему "Никаких Count" (Count пригодился бы) ? min/max можно?

... xml_table(for $r in user_and_disc, users ... ето декартово без JOIN?

....
stax
...
Рейтинг: 0 / 0
29.05.2020, 16:22
    #39964163
exciter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачку
Stax,

я скорее поверю в это:
MakeSureпрепод считает, что сначала происходит декартово произведение, а потом фильтрация, если ты не используешь ANSI JOIN

чем в то, что в университетском курсе по БД нужно использовать xmltable, и при этом в задании на это нет никаких указаний.
...
Рейтинг: 0 / 0
29.05.2020, 16:33
    #39964168
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачку
exciter
Stax,

я скорее поверю в это:
MakeSureпрепод считает, что сначала происходит декартово произведение, а потом фильтрация, если ты не используешь ANSI JOIN

чем в то, что в университетском курсе по БД нужно использовать xmltable, и при этом в задании на это нет никаких указаний.

я не против (согласен)

но как обяснить "Никаких Count"?

да и нет там анси

ps
хмл я приплел

pss
я б сначала решал именно с count (чутку сложнее *)
....
stax
...
Рейтинг: 0 / 0
29.05.2020, 16:50
    #39964177
MakeSure
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачку
На правах пятничного бреда, зато есть декартово, нет АНСИ джоина, нет каунта и подзапросов :D

Код: plsql
1.
2.
3.
4.
5.
select decode(b1.role_name, b2.role_name, null, decode(b1.user_id, b2.user_id, b1.user_id)) as usr
  from user_and_disc b1
      ,user_and_disc b2
 group by decode(b1.role_name, b2.role_name, null, decode(b1.user_id, b2.user_id, b1.user_id))
having max(b1.user_id) = min(b2.user_id)
...
Рейтинг: 0 / 0
29.05.2020, 16:55
    #39964179
exciter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачку
Stax

но как обяснить "Никаких Count"?


Групповые функции еще не проходили, может быть. Хочется только декартово произведение с фильтрами.

При отсутствии других вводных, сам бы что-то подобное попробовал бы сдать (только cross join бы стёр, раз слово join не нравится):

oragraf
hyper9,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select d1.role_name, d2.role_name, s.name
  from u s
        cross join d d1
        cross join u t 
        cross join d d2
where 
        d1.user_id = s.user_id and d1.role_name = 'student'
    and t.user_id = s.user_id 
    and t.user_id = d2.user_id and d2.role_name = 'tutor';

...
Рейтинг: 0 / 0
29.05.2020, 16:59
    #39964181
exciter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачку
MakeSure
На правах пятничного бреда, зато есть декартово, нет АНСИ джоина, нет каунта и подзапросов :D

Код: plsql
1.
2.
3.
4.
5.
select decode(b1.role_name, b2.role_name, null, decode(b1.user_id, b2.user_id, b1.user_id)) as usr
  from user_and_disc b1
      ,user_and_disc b2
 group by decode(b1.role_name, b2.role_name, null, decode(b1.user_id, b2.user_id, b1.user_id))
having max(b1.user_id) = min(b2.user_id)



не хватает имени пользователя, так что без второй таблицы, кажется не обойтись)
...
Рейтинг: 0 / 0
29.05.2020, 17:09
    #39964186
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачку
MakeSure,



посмотрите план, там будет слово JOIN

дурацкие требования, поросто валит девятку, трудно будет сдать

пусть проффесор покажет простейшее "декартово произведение без JOIN"

....
stax
...
Рейтинг: 0 / 0
29.05.2020, 18:49
    #39964214
hyper9
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачку
Вот ссылка на лекцию по этой теме
https://mix.sumdu.edu.ua/textbooks/11123/490228/index.html
...
Рейтинг: 0 / 0
30.05.2020, 10:23
    #39964318
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить задачку
hyper9
Вот ссылка на лекцию по этой теме
https://mix.sumdu.edu.ua/textbooks/11123/490228/index.html

авторВ большинстве случаев такой набор данных будет совершенно бесполезным.

так и ответьте проффесору

для решения задачи декартово произведение бесполезное

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


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