【问题标题】:Writing a select query using 2 tables and 2 conditions使用 2 个表和 2 个条件编写选择查询
【发布时间】:2019-10-06 10:27:05
【问题描述】:

我无法编写逻辑来查看一个表中的 id 是否在另一个表中出现 12 次或更多次。

问题是: “有些学者写了超过 12 篇论文,还有一些 学者们对标题中包含“数据库”一词的领域感兴趣。列出 满足其中一个或两个条件的每个学者的学术编号。”

这是 iv 到目前为止写的内容

SELECT acnum 
FROM academic 
WHERE acnum IN (
SELECT panum 
FROM paper 
WHERE title LIKE '%database%');

还有一些关于数据库关系/表的信息。

可能需要的表格方案:

AUTHOR( panum*, acnum* )
PAPER( panum , title)

样本数据:

PAPER values(100, 'Intro to programming');
PAPER values(101, 'Intro to database systems');
PAPER values(102, 'Intro to database management');
PAPER values(103, 'Intro to computing');
PAPER values(104, 'Intro to database analysis');

AUTHOR values (101, 25);
AUTHOR values (102, 25);
AUTHOR values (103, 25);
AUTHOR values (104, 25);
AUTHOR values (105, 25);
AUTHOR values (106, 25);
AUTHOR values (107, 25);
... up until 12 that all have same acnum (25).

【问题讨论】:

  • 请用相关且最少的示例数据来构建 SQL 问题,以展示您的要求,以及相应的预期输出。请阅读此链接:Why should I provide a Minimal Reproducible Example for a very simple SQL query?
  • 学术和论文之间没有关系,因此您需要使用加入/链接/外部参照表作者从学术到论文,并且由于您只是从学术获得 acnum,您可能可以放弃这个表完全来自查询,
  • 哦,好吧,所以我可以使用表“作者”和“纸”表来获得结果?我的主要问题是如何编写逻辑来查找一个 acnum 是否还有 12 个附加的 panum到它,那么我如何检查 Author 表是否重复了相同的 acnum 12 次或更多次,但表中的每个人都有不同的 panum?(我认为这会给我我正在寻找的答案)
  • @HuseyinYesiler 请阅读第一条评论中分享的链接;图片无济于事(尤其是 ER 图),请提供一些相关的示例数据,以便问题有意义且可以回答。
  • @MadhurBhaiya 这就是你的意思吗?不确定我是否正确理解了这篇文章

标签: mysql sql sqlite


【解决方案1】:

你必须加入5个表,并在HAVING子句中设置条件:

select ac.acnum 
from academic ac
left join author a on a.acnum = ac.acnum
left join paper p on p.panum = a.panum and p.title like '%database%'
left join interest i on i.acnum = ac.acnum
left join field f on f.fieldnum = i.fieldnum and f.title like '%database%'
group by ac.acnum
having 
  count(distinct p.panum) > 12
  or
  sum(f.title is not null) > 0

如果第一个条件不是关于至少写过 12 篇关于 'database' 论文的学者,而是任何篇论文,则删除条件:

and p.title like '%database%'

【讨论】:

    猜你喜欢
    • 2021-12-14
    • 2012-10-15
    • 1970-01-01
    • 2013-04-30
    • 2017-07-08
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多