Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从两个MySql表中获取结果_Mysql_Sql_Database - Fatal编程技术网

如何从两个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%';