我在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 |
现在我希望所有uid都具有上述locationid和projectid组合匹配。意味着结果应该是
| 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值。我的查询有什么问题?我的查询是对的吗? 请帮帮我。
提前致谢。
答案 0 :(得分: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;
答案 1 :(得分: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>
答案 2 :(得分: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子句中指定uid
(第二行)。