Переписывание без использования уникальной конструкции в SQL - PullRequest
0 голосов
/ 05 марта 2012

Используя элемент схемы (memb_no, имя, возраст), книгу (isbn, название, авторы, издатель) и заимствованные (memb_no, isbn, date), у меня есть следующий запрос.Единственная проблема в том, что я не должен использовать уникальную конструкцию.Как я могу переписать это без использования уникальной конструкции?

Select T.course_id 
From course as T 
Where unique (select R.course_id 
       From section as R 
       Where T.course_id = R.course_id and R.year = 2009);

Ответы [ 4 ]

3 голосов
/ 05 марта 2012

У вас уже есть другие действительные ответы, но моя предпочтительная форма будет:

Select T.course_id 
From course as T 
Where (Select Count(*)
       From section as R 
       Where T.course_id = R.course_id and R.year = 2009) = 1;
1 голос
/ 05 марта 2012

с макушки головы:

Select T.course_id 
From course as T 
Where exists(select R.course_id 
       From section as R 
       Where T.course_id = R.course_id and R.year = 2009
       group by course_id having count(*)=1);
1 голос
/ 05 марта 2012

Просто перепишите ваш запрос unique как подзапрос, чтобы присоединиться к course:

select t.course_id
from course as t
join(
    select course_id
    from section
    where year=2009
    group by course_id
    having count(1)=1
)r
on (t.course_id=r.course_id);
0 голосов
/ 14 октября 2018

Конструкция UNIQUE возвращает true , если подзапрос пуст.Следовательно, правильный эквивалент этого запроса (обратите внимание на <=): </p>

Select T.course_id 
From course as T 
Where 1 <= (Select Count(*)
   From section as R 
   Where T.course_id = R.course_id and R.year = 2009);

PS Это пример из учебника Основные понятия системы баз данных (6-е изд.).Пример приведен на с.94 и эквивалентное утверждение, которое я упомянул, дано на с.95.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...