是否存在?

xzlaal3s  于 2021-06-21  发布在  Mysql
关注(0)|答案(4)|浏览(208)

这是我正在使用的数据库:https://drive.google.com/file/d/1arjekoqpal0jfir1h3nxycfvngncnuxg/view?usp=sharing
查找标题包含字符串“data”且至少有一位作者来自deptnum 100部门的论文。列出这些论文的篇幅和标题。必须使用exists运算符。确保查询不区分大小写。
我不知道如何输出每个学术论文的总数。
我对这个问题的尝试是:

SELECT panum, title
FROM department NATURAL JOIN paper
WHERE UPPER(title) LIKE ('%data%') AND EXISTS (SELECT deptnum FROM 
department WHERE deptnum = 100);

这似乎是空的。我不确定我做错了什么,喜欢和存在能结合起来吗?
谢谢您。

deikduxw

deikduxw1#

不要使用 natural join ! 这是一个令人厌恶的,因为它不使用显式声明的外键关系。明确列出您的 join 键,因此查询更易于理解和维护。
也就是说,您的子查询就是问题所在。我希望查询更像这样:

SELECT p.panum, p.title
FROM paper p
WHERE lower(p.title) LIKE '%data%' AND
      EXISTS (SELECT 1
              FROM authors
              WHERE a.author = p.author AND -- or whatever the column should be
                    a.deptnum = 100
             );
fnvucqvd

fnvucqvd2#

短语 UPPER(title) LIKE ('%data%') 永远不会找到任何行,因为标题中任何内容的大写版本都不会包含小写字母 data .

bpsygsoo

bpsygsoo3#

select p.TITLE,p.PANUM   from PAPER p where TITLE   like '%data%'
AND EXISTS( 
SELECT * FROM AUTHOR a join ACADEMIC d
      on d.ACNUM=a.ACNUM where d.DEPTNUM=100 AND a.PANUM=p.PANUM)
jdzmm42g

jdzmm42g4#

因为他们需要 EXISTS ,运算符需要应用于 author ,不是 department table。内部查询 EXISTS 需要与对论文的查询相关联,因此不应该存在 JOIN 在顶层:

SELECT p.PANUM, p.TITLE
FROM paper p
WHERE p.Title LIKE ('%data%') AND EXISTS (
    SELECT *
    FROM author a
    JOIN academic ac ON ac.ACNUM=a.ACNUM
    WHERE a.PANUM=p.PANUM AND ac.DEPTNUM=100
)

注意,自从 author 表缺少 DEPTNUM ,您确实需要在 EXISTS 查询以引入一行 academic 因为它 DEPTNUM 列。

相关问题