在嵌套的SQL查询中需要帮助

时间:2016-08-26 06:56:17

标签: sql nested-queries

请帮我解决这个问题

SELECT * 
FROM documents 
WHERE doc_id <> (SELECT doc_id 
                 FROM doc_submitted 
                 WHERE student_IDNUM = 131009685)

我想要的是获取doc_submitted以外的所有文件。

4 个答案:

答案 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