powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите решить задачку
24 сообщений из 24, страница 1 из 1
Помогите решить задачку
    #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
Помогите решить задачку
    #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
Помогите решить задачку
    #39963888
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oragraf,

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

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

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

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

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


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

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



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



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

imxo

from t1, t2; это JOIN

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


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

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

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

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

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

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

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

Иначе непонятно, что он имеет в виду под "произведением таблиц"
...
Рейтинг: 0 / 0
Помогите решить задачку
    #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
Помогите решить задачку
    #39964147
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,


картинки не смотрел...
...
Рейтинг: 0 / 0
Помогите решить задачку
    #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
Помогите решить задачку
    #39964161
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exciter
oragraf,

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


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

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

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

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

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

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

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

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

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

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

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

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

pss
я б сначала решал именно с count (чутку сложнее *)
....
stax
...
Рейтинг: 0 / 0
Помогите решить задачку
    #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
Помогите решить задачку
    #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
Помогите решить задачку
    #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
Помогите решить задачку
    #39964186
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MakeSure,



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

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

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

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

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

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

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

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


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