使用联接转换具有 NOT EXIST 和 MINUS 的相关子查询
Converting correlated subquery with NOT EXIST and MINUS using joins
我正在尝试将以下使用 NOT EXIST 和 MINUS 的相关子查询转换为不使用 NOT EXISTS 运算符的查询。
架构非常简单:
Student(Stud_no: Varchar, Stud_name: Varchar, Dept: Varchar)
Membership(Mem_no: Number, Stud_no: Varchar, Fine: Number)
Book(book_no: Number, book_name: Varchar, author: Varchar, Category: Varchar)
Iss_rec(iss_no: Number, iss_date: date, Mem_no: Number, book_no: Number)
要找到借完所有书的同学Mem_no,我的查询是,
SELECT MEM_NO FROM MEMBERSHIP A WHERE NOT EXISTS ((SELECT BOOK_NO FROM BOOK) MINUS (SELECT BOOK_NO FROM ISS_REC B WHERE A.MEM_NO = B.MEM_NO));
现在,当我尝试使用连接实现它时,出现错误。
SELECT A.MEM_NO FROM MEMBERSHIP A LEFT OUTER JOIN ((SELECT BOOK_NO FROM BOOK) MINUS (SELECT BOOK_NO FROM ISS_REC B WHERE A.MEM_NO = B.MEM_NO)) C ON A.MEM_NO = C.BOOK_NO WHERE C.BOOK_NO IS NULL;
谁能帮帮我...
此查询应该如您所愿:它将为您提供从 Book table 中借阅所有书籍的学生列表。它不包含 NOT EXIST 或 MINUS(我猜这个限制只是为了学术目的)。在 http://sqlfiddle.com/#!4/19e78/2
查看它使用相同的数据
select m.stud_no, count(distinct i.book_no) from membership m join iss_rec i
on i.mem_no=m.mem_no
group by m.stud_no
having count(distinct i.book_no)=(select count(*) from book)
请注意,此解决方案假定存在参照完整性(例如,iss_rec 中不能有 book_no,而书 table 中没有)
我正在尝试将以下使用 NOT EXIST 和 MINUS 的相关子查询转换为不使用 NOT EXISTS 运算符的查询。
架构非常简单:
Student(Stud_no: Varchar, Stud_name: Varchar, Dept: Varchar)
Membership(Mem_no: Number, Stud_no: Varchar, Fine: Number)
Book(book_no: Number, book_name: Varchar, author: Varchar, Category: Varchar)
Iss_rec(iss_no: Number, iss_date: date, Mem_no: Number, book_no: Number)
要找到借完所有书的同学Mem_no,我的查询是,
SELECT MEM_NO FROM MEMBERSHIP A WHERE NOT EXISTS ((SELECT BOOK_NO FROM BOOK) MINUS (SELECT BOOK_NO FROM ISS_REC B WHERE A.MEM_NO = B.MEM_NO));
现在,当我尝试使用连接实现它时,出现错误。
SELECT A.MEM_NO FROM MEMBERSHIP A LEFT OUTER JOIN ((SELECT BOOK_NO FROM BOOK) MINUS (SELECT BOOK_NO FROM ISS_REC B WHERE A.MEM_NO = B.MEM_NO)) C ON A.MEM_NO = C.BOOK_NO WHERE C.BOOK_NO IS NULL;
谁能帮帮我...
此查询应该如您所愿:它将为您提供从 Book table 中借阅所有书籍的学生列表。它不包含 NOT EXIST 或 MINUS(我猜这个限制只是为了学术目的)。在 http://sqlfiddle.com/#!4/19e78/2
查看它使用相同的数据 select m.stud_no, count(distinct i.book_no) from membership m join iss_rec i
on i.mem_no=m.mem_no
group by m.stud_no
having count(distinct i.book_no)=(select count(*) from book)
请注意,此解决方案假定存在参照完整性(例如,iss_rec 中不能有 book_no,而书 table 中没有)