2012-05-18 188 views
3

我工作的MySQL和具有相同的架构两个表:SQL:如果比较两个表中的列值相等

预审

|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,导致被告Id1在第二个表中没有articleId 3。

我希望你明白我的意思。我现在正在法律上写论文,而我进入sql的时间早已过去了。当然,我已经做了一些研究,并尝试了几次加入,但我无法找到解决方案。希望你能帮助我。

回答

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 

我还没有运行,所以它可能是有点过,但给它一个睫毛。它所做的是将一行中的零返回到未匹配的行中,因此HAVING子句会将分组结果过滤为文章计数相同的结果。

+0

感谢您的解答和解释。只是两个注意事项:而不是'select accusedId'它应该是'选择a.accusedId'并且在sum之后没有空格,否则mysql会抛出一个错误。 否则它工作正常。你让我的一天 – chris

+0

编辑答案包括建议。我想说一下戈登的观点;如果它能够工作,接受答案不会超过几秒钟。干杯。 –

+0

对不起,我是新来的stackoverflow,我thougt投票答复并接受它,是相同的,我不能投票了,由于低信誉。现在,我接受了答案。 – chris