SQL - 在某些条件下选择查询的问题
Posted
技术标签:
【中文标题】SQL - 在某些条件下选择查询的问题【英文标题】:SQL - Problem with a query to select with some condition 【发布时间】:2020-06-17 16:57:04 【问题描述】:我有这两个表,在第一个(WRITES)中有存储在 db 中的书籍(DOI 标识书籍代码和 ORCID 书籍的作者,在第二个(QUOTES)中有引号每本书)。 我试图达到的结果是让那些在他们的书中提到其他作者而不是他们自己写的书的作者的识别码
写
Doi Orcid
1 100
2 200
3 300
4 100
报价
Doi DoiMentioned
1 4
2 3
3 4
预期输出:
ORCID Doi DoiMentioed
200 2 3
300 3 4
我的代码:
(select w.orcid
from writes w
join quotes q
on q.doi = w.doi
minus
select w.orcid
from writes w
join quotes q
on q.doimentioned = w.doi);
我也尝试了内部连接,但结果不是我希望的
【问题讨论】:
【参考方案1】:内连接应该可以工作,但是您需要使用WRITES
表两次:一次用于提及作者,一次用于提及作者。然后比较它们以确保它们不同。
SELECT w.orcid, w.doi, q.doimentioned
FROM writes w
INNER JOIN quotes q on q.doi = w.doi
INNER JOIN writes w2 ON w2.doi = q.doiMentioned
WHERE w2.orcid != w.orcid;
完整示例,包含来自 OP 的数据,以显示其有效:
WITH writes (doi, orcid) AS
( SELECT 1, 100 FROM DUAL UNION ALL
SELECT 2, 200 FROM DUAL UNION ALL
SELECT 3, 300 FROM DUAL UNION ALL
SELECT 4, 100 FROM DUAL ),
quotes ( Doi, DoiMentioned ) AS
( SELECT 1,4 FROM DUAL UNION ALL
SELECT 2,3 FROM DUAL UNION ALL
SELECT 3,4 FROM DUAL )
SELECT w.orcid, w.doi, q.doimentioned
FROM writes w
INNER JOIN quotes q on q.doi = w.doi
INNER JOIN writes w2 ON w2.doi = q.doiMentioned
WHERE w2.orcid != w.orcid;
+-------+-----+--------------+ | ORCID | DOI | DOIMENTIONED | +-------+-----+--------------+ | 200 | 2 | 3 | | 300 | 3 | 4 | +-------+-----+--------------+
【讨论】:
@Gwynbleidd 我刚刚用数据更新了答案以显示它有效。 再次感谢!关闭并重新打开 Sql Developer 后,查询起作用了。以上是关于SQL - 在某些条件下选择查询的问题的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB查询以选择具有所有元素都匹配某些条件的数组的文档