如何从两个MySql表中获取结果
我有两张桌子:如何从两个MySql表中获取结果,mysql,sql,database,Mysql,Sql,Database,我有两张桌子: -------------------------- USER ------------------ id | name | email ------------------ 1 | w | w@g ------------------ 2 | x | x@g ----------------- 3 | y | y@g ------------------ 4 | z | z@g ------------------ FRIEN
--------------------------
USER
------------------
id | name | email
------------------
1 | w | w@g
------------------
2 | x | x@g
-----------------
3 | y | y@g
------------------
4 | z | z@g
------------------
FRIENDS
-----------------------
user | friend | status |
-----------------------
1 | 2 | friend
-----------------------
1 | 3 | requested
-----------------------
在朋友表中,w是x和y的朋友
我想要的是:
我想在搜索查询中获取所有记录,包括用户好友状态
Expected Results:
------------------------------
id | name | email | status |
------------------------------
2 | x | x@g | friend |
------------------------------
3 | y | y@g | requested |
------------------------------
4 | z | z@g | null |
------------------------------
我试过的
提前感谢。您需要一个简单的加入:
SELECT * FROM
USER U INNER JOIN FRIENDS F
ON U.id = F.user
首先,您希望显示用户数据名称等,所以请从用户中选择。您想用它显示他们与用户1相关的好友状态,因此请相应地加入。由于他们可以具有与用户1相关或不相关的好友状态,但您仍希望显示他们,因此您不能使用内部联接,而是需要外部联接。最后,从where子句中的结果中排除user 1本身
select u.*, f.status
from user u
left join friends f on f.friend = u.id and f.user = 1
where u.id <> 1
接受后编辑:如果您希望所有符合特定条件的用户都使用firstname,如“%e%”,那么您的结果也必须包含该用户,以使显示的数据有意义。因此,您必须查询用户表两次。为了做到这一点,我将首先将所有符合该标准的用户与所有其他用户(即其他用户ID)合并,然后左键加入好友关系
select user_self.*, user_other.*, f.status
from user user_self
join user user_other on user_other.id <> user_self.id
left outer join friends f on and f.user = user_self.id and f.friend = user_other.id
where user_self.firstname like '%e%';
如果您希望所有用户都具有所有关系,请删除WHERE子句。我认为您要求的是加入查询,请也写下您的预期结果。@Alpac现在检查问题PZ请向我们显示您到目前为止的查询。你在哪里失败?我想这是因为这是一个非常基本的问题,你可以在这里或谷歌上找到答案。你没有表现出你自己的努力。通常你会尝试,然后以某种方式失败,并在这里寻求具体的帮助,而不是说:我想做这个或那个,我想让你为我做它。@亲爱的托尔斯滕,我确实搜索了……但我没有找到我的解决方案。再次检查我的问题。嗨,谢谢,这是我想要的。我修改了您的查询并正在工作。选择u.*,f.status from user u left join friends f on f.friend=u.id和f.user=1,其中u.id 1和u.lastName(如“%ik%”)感谢您接受我的回答。为了满足您的示例,我编写了匹配用户1的查询。如果要选择另一个用户,则必须在“我的查询”中用select id from user where lastname(如“%ik%”)替换1。如果您的条件甚至可以匹配多个用户,那么您也应该扩展结果以显示这些用户。我已经相应地编辑了我的答案。哦,现在我明白了。您只想向某些用户显示与“%ik%”匹配的用户。那么是的,您修改的查询是正确的。
select user_self.*, user_other.*, f.status
from user user_self
join user user_other on user_other.id <> user_self.id
left outer join friends f on and f.user = user_self.id and f.friend = user_other.id
where user_self.firstname like '%e%';