2012-05-18 215 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