我正在研究mysql并且有两个具有相同模式的表:
预审
|id|accusedId|articleid|
------------------------
|1 | 1 | 1 |
|2 | 1 | 2 |
|3 | 1 | 3 |
|4 | 2 | 1 |
|5 | 2 | 2 |
试验
|id|accusedId|articleid|
------------------------
|1 | 1 | 1 |
|2 | 1 | 2 |
|3 | 2 | 1 |
|4 | 2 | 2 |
我希望得到第一个和第二个表中所有accusedIds
相等的articleIds
。
上面的例子应该只返回accusedId 2,因为accusedId 1在第二个表中没有articleId 3。
我希望你明白我的意思。我目前正在撰写法律论文,而我进入sql的时间早就过去了。当然我已经做了一些研究,并尝试了几个连接,但我无法找到解决方案。希望你能帮助我。
答案 0 :(得分:1)
尝试这样的事情:
select a.accusedId , sum(a.accusedid) as cnt_a, sum(coalesce(b.accusedId, 0)) as cnt_b
from a left join b on a.accusedId = b.accusedId and a.articleId = b.articleId
group by accusedId
having cnt_a = cnt_b
我甚至没有跑过,所以它可能有点偏,但是给它一个鞭子。它正在做的是在一个与b不匹配的行中返回零,因此HAVING子句会将您的分组结果过滤到文章计数相等的那些。