2012-09-06 26 views
3
匹配同桌

我在MySQL數據庫 表下表結構來獲取數據:MYTABLE如何通過在MySQL

-------------------------------- 
| uid | locationid | projectid | 
-------------------------------- 
| 2 |  4  | 2  | 
| 2 |  4  | 2  | 
| 2 |  3  | 5  | 
| 2 |  3  | 5  | 
| 2 |  1  | 2  | 
| 2 |  1  | 2  | 
| 2 |  1  | 2  | 
| 2 |  1  | 1  | 
| 3 |  1  | 5  | 
| 3 |  1  | 2  | 
| 3 |  1  | 1  | 
| 3 |  1  | 1  | 
| 7 |  3  | 1  | 
| 5 |  1  | 5  | 
| 6 |  4  | 2  | 
| 5 |  1  | 5  | 
| 3 |  4  | 1  | 
| 3 |  3  | 3  | 
| 7 |  4  | 2  | 
| 7 |  4  | 3  | 

說我傳遞的uid = 2那麼對於UID = 2獨特locationid和專案的組合這個

| 2 |  4  | 2  | 
| 2 |  3  | 5  | 
| 2 |  1  | 2  | 
| 2 |  1  | 1  | 

現在我想要所有具有上述locationid和projectid組合匹配的uid。意味着結果應該是

| 3 |  1  | 2  | 
| 3 |  1  | 1  | 
| 3 |  1  | 1  | 
| 6 |  4  | 2  | 
| 7 |  4  | 2  | 

如果我傳遞的uid = 3,那麼結果應該是

| 2 |  1  | 2  | 
| 2 |  1  | 2  | 
| 2 |  1  | 2  | 
| 2 |  1  | 1  | 
| 5 |  1  | 5  | 
| 5 |  1  | 5  | 

爲此,我使用下面的查詢,但它給出錯誤的結果作爲locationid和專案組合不正確地匹配

SELECT a.* 
FROM Mytable a, Mytable b 
WHERE a.locationid = b.locationid 
AND a.projectid = b.projectid 
AND a.locationid IN (SELECT DISTINCT locationid FROM Mytable WHERE uid=$pmid) 
AND a.projectid IN(SELECT DISTINCT projectid FROM Mytable WHERE uid=$pmid) 
AND a.uid !=$pmid 

這裏$ pmid是我通過的uid值。我的查詢出了什麼問題?我的查詢是否正確? 請幫幫我。

在此先感謝。

+1

問題不清楚!看看你提供的第三張表格,有兩個記錄,3 - 1 - 1這應該如何獨特? – CloudyMarble

回答

0

嘗試此查詢 -

SELECT t1.* FROM mytable t1 
    JOIN (SELECT * FROM mytable WHERE uid = 2 GROUP BY locationid, projectid) t2 
    ON t1.uid <> t2.uid AND 
     t1.locationid = t2.locationid AND 
     t1.projectid = t2.projectid; 

指定的WHERE子句中的(第二行)。

+0

感謝您的回覆並提供解決方案 – CodeWarrior

2

這應該工作:

SELECT a.* 
FROM Mytable a 
    INNER JOIN (SELECT DISTINCT locationid, projectid 
       FROM Mytable 
       WHERE uid = 2 
       ) b 
     ON a.locationid = b.locationid 
      AND a.projectid = b.projectid 
      AND a.uid <> 2; 

例子:SQLFiddle

0

試試這個:

SELECT t.* 
FROM Mytable t 
JOIN 
     (SELECT distinct locationid , projectid 
     FROM Mytable 
     WHERE uid=<uid>)a 
ON  t.locationid =a.locationid 
AND t.projectid=a.projectid 
WHERE t.uid != <uid>