Mysql 在多个字段中加入或选择

Mysql 在多个字段中加入或选择,mysql,Mysql,(下面的例子是假设性的,但说明了概念) 使用MySQL,假设我有两个表: 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

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

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

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 that第一个表添加唯一索引(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-我更新了示例输出以更好地反映目标

尝试以下查询:

select tbl2.userid,tbl1.moreinfo,
tbl2.someinfo,tbl2.addinfo
from tbl1 join tbl2
on (tbl1.usertoid = tbl2.userid and tbl1.userfromid = 1)

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

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

试试这个。测试和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;

谢谢你的帖子。但是,该查询不会返回userTo与传递的用户id匹配的关系。谢谢您的帖子。正如我在另一张海报上评论的那样,传递id应该会返回与该id的所有关系,无论是userFrom还是userTo,并且应该排除传递id的用户。谢谢你的帖子。同样,这无法获取所有关系-记住“userFrom”或“userTo”部分并不重要-如果存在关系(from或to),则应返回该关系,减去查询的id。