0

(下面的例子是假设的,但说明了这个概念)。

使用 MySQL,假设我有 2 个表:

userFromID  userToId  moreInfo
1           2         cat
1           3         dog
4           1         bear
3           4         fish

和...

userId  someInfo addlInfo
1       m         32
2       f         33
3       m         25
4       f         28

我想查询用户 ID,并从两个表中获取与 user1 共享关系的所有用户的连接信息。

假设第一个表有类似的东西,alter table thatFirstTable add unique index(userFromId, userToId)所以不会有任何重复 - 两个 id 之间的每个关系都是唯一的。

谁是“从”或“到”并不重要

因此,如果查询与用户 id 的关系,则所需的结果将是这样的:1

userId  moreInfo  someInfo  addlInfo
2       cat       f         33
3       dog       m         25
4       bear      f         28

谢谢。

/编辑这个“有效”,但我怀疑有更好的方法吗?

SELECT * FROM users JOIN friends ON friends.userFrom = users.id OR friends.userTo = users.id WHERE users.id != 1 AND friends.userFrom = 1 OR friends.userTo = 1

/EDIT2 - 我更新了示例输出以更好地反映目标

4

3 回答 3

0

试试这个查询::

select tbl2.userid,tbl1.moreinfo,
tbl2.someinfo,tbl2.addinfo
from tbl1 join tbl2
on (tbl1.usertoid = tbl2.userid and tbl1.userfromid = 1)
于 2012-12-20T10:12:48.677 回答
0

您应该只使用下面的查询连接表。

select u.userId, f.moreInfo, u.someInfo, u.addlInfo
from users AS u INNER JOIN friends AS f ON u.userId = f.UserToId
where f.userFrom = 1
于 2012-12-20T10:12:52.240 回答
0

尝试这个。经过测试且 100% 正常工作

select a.userToID, a.moreInfo, b.someInfo, b.addInfo from tbl1 a 
left outer join
tbl2 b on a.userToID = b.userId
where a.userFromID = 1;
于 2012-12-20T10:31:22.933 回答