2016-08-23 87 views
0

我有一個從兩種形式收集反饋的網站。我有一個SQL查詢,返回通過其中一個或兩個提交反饋的用戶的姓名。反饋表在表格的feedback列中給出ID 5和6。SQL:根據兩列值過濾結果集中的重複項

SELECT 1.firstname, 1.lastname, 2.feedback, 2.timemodified 
FROM 1 
INNER JOIN 2 ON 1.id = 2.userid 
ORDER BY 1.lastname 

這個返回結果集,看起來像這樣:

firstname lastname feedback timemodified 
--------- -------- -------- ------------ 
john   doe   5   1471012069 
john   doe   6   1471012075 
jane   smith  5   1471013449 
jane   smith  6   1471055903 
joe   blow  6   1473058839 
jim   jones  5   1471033691 

我只對那些誰通過兩種形式提交反饋用戶感興趣的(5,6)。我想過濾我的結果集,以便任何沒有被淘汰的人和只被列出一次的人。 (例如,上面的結果集應該只顯示john doe和jane smith,每次一個。)想法?

+1

對於表格/列標識符,1和2是不可接受的術語。 – Strawberry

+0

如果您喜歡,請考慮遵循以下簡單的兩步操作步驟:1.如果您尚未這樣做,請提供適當的CREATE和INSERT語句(和/或sqlfiddle),以便我們可以更輕鬆地複製問題。 2.如果您尚未這樣做,請提供與步驟1中提供的信息相對應的所需結果集。 – Strawberry

回答

1

要僅爲提交了反饋項目5和6的每個用戶返回一行,您可以將您的2表格加入兩次,並對上述feedback ID進行過濾。

SELECT 1.firstname, 1.lastname, 
    2a.feedback, 2a.timemodified, 
    2b.feedback, 2b.timemodified 
FROM 1 
INNER JOIN 2 as 2a ON 1.id = 2a.userid and 2a.feedback = 5 
INNER JOIN 2 as 2b ON 1.id = 2b.userid and 2b.feedback = 6 
ORDER BY 1.lastname 

您還可以使用WHERE EXISTS子句完成類似的結果。

SELECT 1.firstname, 1.lastname 
FROM 1 
WHERE 
EXISTS (SELECT * FROM 2 WHERE 2.userid = 1.id and feedback = 5) 
AND 
EXISTS (SELECT * FROM 2 WHERE 2.userid = 1.id and feedback = 6) 

注:我已經保存的12你極不尋常的表名在我的答案,以便回答問題比賽,但我懷疑這是你真正的表名。

+0

它們不是我真正的表名,但無論如何。查詢工作。謝謝! – Chris

0
SELECT 1.firstname, 
     1.lastname 
FROM 1 
WHERE 1.id IN (SELECT 2.userid FROM 2)