Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用联接转换不存在且为负的相关子查询_Sql_Oracle_Oracle10g - Fatal编程技术网

Sql 使用联接转换不存在且为负的相关子查询

Sql 使用联接转换不存在且为负的相关子查询,sql,oracle,oracle10g,Sql,Oracle,Oracle10g,我正在尝试使用NOT EXISTS和减号将以下相关子查询转换为不带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: Var

我正在尝试使用NOT EXISTS和减号将以下相关子查询转换为不带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)
要找到借了所有书的学生的成员号,我的问题是

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;

有人能帮我吗?

这个查询应该能像你们期望的那个样工作:它会给你们一个学生列表,这些学生从书桌上借了所有的书。它既不包含不存在也不包含负数(我猜这个限制仅用于学术目的)。查看它在以下位置使用相同的数据:


请注意,此解决方案假定存在引用完整性(例如,iss_rec中不可能存在不在book表中的book_no)

您也可以在该查询中使用内部联接,因为没有借书的学生是不相关的。这很好。。但我要找的是子查询,而不是相关查询
 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)