3

Mysql DBテーブルには次のテーブル構造があります:Mytable

--------------------------------
| 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とprojectidの一意の組み合わせは次のようになります。

|  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とprojectidの組み合わせが正しく一致しないため、間違った結果が得られます

 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値です。私のクエリの何が問題になっていますか?私の質問は正しいですか?私を助けてください。

前もって感謝します。

4

3 に答える 3

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

于 2012-09-06T06:01:55.713 に答える
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>
于 2012-09-06T06:02:51.477 に答える
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;

uidWHERE句(2行目)を指定します。

于 2012-09-06T06:10:50.870 に答える