Mysql中如何通过匹配同一个表来获取数据
我在Mysql数据库中有如下表结构 表:MytableMysql中如何通过匹配同一个表来获取数据,mysql,join,Mysql,Join,我在Mysql数据库中有如下表结构 表:Mytable -------------------------------- | uid | locationid | projectid | -------------------------------- | 2 | 4 | 2 | | 2 | 4 | 2 | | 2 | 3 | 5 | | 2 | 3 |
--------------------------------
| 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 |
| 2 | 1 | 2 |
| 2 | 1 | 2 |
| 2 | 1 | 2 |
| 2 | 1 | 1 |
| 5 | 1 | 5 |
| 5 | 1 | 5 |
如果我通过uid=3,那么结果应该是
| 3 | 1 | 2 |
| 3 | 1 | 1 |
| 3 | 1 | 1 |
| 6 | 4 | 2 |
| 7 | 4 | 2 |
| 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值。我的问题出了什么问题?我的质疑是否正确?
请帮帮我
提前感谢。这应该可以:
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;
示例:试试这个:
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>
请尝试此查询-
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。问题不清楚!看一看第三个表ou提供的,有两个记录与3-1-1这应该是唯一的吗?感谢回复和给出解决方案