请帮我解决这个问题
SELECT *
FROM documents
WHERE doc_id <> (SELECT doc_id
FROM doc_submitted
WHERE student_IDNUM = 131009685)
我想要的是获取doc_submitted
以外的所有文件。
答案 0 :(得分:2)
我通常建议NOT EXISTS
超过NOT IN
,因为即使子查询中的一行有NOT IN
值,NULL
也会返回零行:
SELECT d.*
FROM documents d
WHERE NOT EXISTS (SELECT 1
FROM doc_submitted ds
WHERE ds.doc_id = d.docid AND ds.student_IDNUM = 131009685
)
答案 1 :(得分:1)
您也可以使用左连接来省略不需要的记录。
SELECT a.*
FROM documents a
LEFT JOIN doc_submitted b ON a.doc_id=b.doc_id AND b.student_IDNUM = 131009685
WHERE b. doc_id IS null
答案 2 :(得分:0)
尝试 NOT IN :
来自主要查询的忽略记录在子查询中可用。
SELECT * FROM documents WHERE doc_id NOT IN
(
SELECT doc_id FROM doc_submitted WHERE student_IDNUM = 131009685
)
答案 3 :(得分:0)
它被称为反连接,与许多关系运算符一样,SQL中没有直接的等价物。相反,我们必须从各种解决方案中进行选择,例如:这是一个:
SELECT doc_id
FROM documents
EXCEPT
SELECT doc_id
FROM doc_submitted
WHERE student_IDNUM = 131009685