2015-10-04 51 views
1

我有一個分表,其中重要的欄目有:找哪家進來對與多個/多種其他列列的值

id   userid  orderid 
1   10   150 
2   10   150 
3   15   151 
4   12   152 
5   11   152 

我需要找到具有多個/不同userid所有orderid。其結果將是:

id   userid  orderid 
4   12   152 
5   11   152 

我可以在PHP中做到這一點,但我希望有人有時間幫我MySQL查詢。我到目前爲止所嘗試的可能是無關緊要的。

回答

1

使用COUNT(DISTINCT)HAVING找到多個不同userid的orderid。

SqlFiddleDemo

SELECT t.* 
FROM tab t 
JOIN (SELECT orderid, COUNT(DISTINCT userid) 
     FROM tab 
     GROUP BY orderId 
     HAVING COUNT(DISTINCT userid) > 1) AS sub 
    ON t.orderid = sub.orderid 
ORDER BY t.id 
+0

剛剛測試過它,它按預期工作。感謝您的時間! – skobaljic

+0

@skobaljic偉大的工程。 SQL可以做很多事情;) – lad2025

+1

我知道它可以做到,但我不能:)不幸的是,對於web開發人員來說,這是一種厄運,一個人都知道,什麼都不知道。 – skobaljic

1

如果你想要得到的只是有相同orderid不同userid,使用該行:

SELECT P1.* FROM points P1 
INNER JOIN points P2 
    ON P1.orderid = P2.orderid and P1.id != P2.id and P1.userid != p2.userid; 

注意,這個第一選擇回報你在你的問題中期待什麼:

現在
 
+----+--------+---------+ 
| id | userid | orderid | 
+----+--------+---------+ 
| 4 |  12 |  152 | 
| 5 |  11 |  152 | 
+----+--------+---------+ 

,如果你想要任何回報orderid是一樣的,不管userid,使用此:

SELECT P1.* FROM points P1 
INNER JOIN points P2 
    ON P1.orderid = P2.orderid and P1.id != P2.id; 

在這種情況下,它不會排除與相同的結果id,返回

 
+----+--------+---------+ 
| id | userid | orderid | 
+----+--------+---------+ 
| 1 |  10 |  150 | 
| 2 |  10 |  150 | 
| 4 |  12 |  152 | 
| 5 |  11 |  152 | 
+----+--------+---------+ 
+0

什麼'; - '意味着條件? – skobaljic

+0

我認爲你理解錯了。 ';'只是結束了代碼。 '--'表示它前面的所有內容都是註釋,所以'和P1.userid!= p2.userid;'不會被執行。如果你沒有''運行代碼; --',只有具有相同orderid的不同userid纔會返回。我會編輯我的答案以清楚說明。 – FirstOne

+0

謝謝,現在有道理。 – skobaljic

相關問題