使用模式成员(memb_no,name,age),book(isbn,title,authors,publisher)和借用(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);
答案 0 :(得分:3)
您已经获得了其他有效答案,但我的首选表格是:
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 :(得分:1)
只需将您的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);
答案 2 :(得分:1)
脱离我的头顶:
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);
答案 3 :(得分:0)
如果子查询为空,则UNIQUE构造返回 true 。因此,此查询的正确等效项是(请注意<=):
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);
P.S。这是数据库系统概念教科书中的一个例子(第六版)。 p中给出了示例。 94和我提到的等效语句在p中给出。 95。
答案 4 :(得分:0)
书本示例有误。
请参阅:https://www.db-book.com/db6/errata-dir/errata-part1.pdf(第11号)
唯一查询的收集解决方法:
SELECT T.course_id
FROM course as T
WHERE (
SELECT count(R.course_id)
FROM section as R
WHERE T.course_id = R.course_id AND R.year = 2019
) <= 1;