2014-01-23 56 views
0

Sqlfiddle這裏存在之間的連接:http://sqlfiddle.com/#!2/4c532/6搞清楚兩個用戶排除其中列不爲一個

我有一個表(user_answers),它保存用戶給問題的答案。在sqlfiddle中,我們有用戶1和用戶2的數據。用戶1共回答5個問題,用戶2共回答8個問題。

我要尋找的結果是:
我希望能拉多少的問題,用戶已經回答了另外一個也回答了。示例輸出如下所示:「用戶1已回答了您回答的8個問題中的5個」。

我曾嘗試加入表,但它給了我更多的結果比我所期待的,我還沒有指定在此查詢,以測試其用戶:

SELECT * FROM user_answers t1 
JOIN user_answers t2 ON t1.uid > t2.uid 
AND t1.answer IS NOT NULL 

,然後當我試圖指定用戶我沒有與此查詢結果:

SELECT * FROM user_answers t1 
JOIN user_answers t2 ON t1.uid > t2.uid 
AND t1.answer IS NOT NULL 
AND t1.uid = 1 
AND t2.uid = 2 

我覺得我越來越近,但可以使用一些指導。

謝謝。

回答

2

如何使用子查詢?

SELECT * FROM user_answers t1 
where t1.uid=1 and t1.quid in 
(select t2.quid from user_answers t2 where t2.uid=2); 
+0

這很好。我正在玩一個子查詢,但我也在閱讀它可能表現不佳和加入的地方。在這種情況下仍然可以加入連接,或者子查詢是我正在查找的結果的最佳方法?乾杯。 – Jared

+1

你當然可以用一個連接來代替它,像這樣'SELECT t1.quid FROM user_answers t1 join user_answers t2 on t1.id = t2.id group by t1.quid have count(*)> 1;'。但我會建議首先看看這個答案:http://stackoverflow.com/a/2577188/473637 – Jeshurun

+0

這不會遠程回答這個問題。用戶的問題總數在哪裏?共享問題總數在哪裏? – Bohemian

0

要查找的每個用戶提出的問題總數,以及有多少正逢:

SELECT 
    count(distinct t1.id) user1_total, 
    sum(t1.quid = t2.quid) shared_total, 
    count(distinct t2.id) user2_total 
FROM user_answers t1 
CROSS JOIN user_answers t2 
WHERE t1.uid=1 
AND t2.uid=2 

使用你的數據,這將返回:

USER1_TOTAL SHARED_TOTAL USER2_TOTAL 
5   5   7 

SQLFiddle。另外,任何時候你可以用JOIN代替WHERE ID IN (subquery)你應該 - 連接(虛擬)總是表現更好。