Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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
Sql 内部连接和如何避免双重步骤_Sql_Sql Server - Fatal编程技术网

Sql 内部连接和如何避免双重步骤

Sql 内部连接和如何避免双重步骤,sql,sql-server,Sql,Sql Server,要获得我正在寻找的信息,我必须执行两个步骤。我很确定这是可以避免的。这就是我目前获取所需信息的方式: SELECT AppUser.* FROM AppUser WHERE Email='xxx@xxx.com' 这将为我提供用户Id,在本例中为38 之后,我进行第二次查询: SELECT Follower.*, AppUser.* FROM Follower INNER JOIN AppUser ON

要获得我正在寻找的信息,我必须执行两个步骤。我很确定这是可以避免的。这就是我目前获取所需信息的方式:

SELECT        AppUser.*
FROM          AppUser WHERE Email='xxx@xxx.com'
这将为我提供用户Id,在本例中为38

之后,我进行第二次查询:

SELECT        Follower.*, AppUser.*
FROM          Follower INNER JOIN
              AppUser ON Follower.ToUserId = AppUser.Id

WHERE FromUserId=38 
这就是我想要的结果

这里的问题是:我如何直接获得我需要的信息=不首先获得Id?我的回复不需要Id

我想要的是有一个查询答案搜索与电子邮件直接


非常感谢

更改第二个查询的位置:

WHERE AppUser.Email='xxx@xxx.com'

将第二个查询的位置更改为:

WHERE AppUser.Email='xxx@xxx.com'

把where语句放到主查询中怎么样

SELECT        Follower.*, AppUser.*
FROM          Follower INNER JOIN
              AppUser ON Follower.ToUserId = AppUser.Id
WHERE AppUser.Email='xxx@xxx.com'

把where语句放到主查询中怎么样

SELECT        Follower.*, AppUser.*
FROM          Follower INNER JOIN
              AppUser ON Follower.ToUserId = AppUser.Id
WHERE AppUser.Email='xxx@xxx.com'

您可以在
WHERE
子句中引用
AppUsers
。您不需要两个查询:

SELECT f.*, au.*
FROM Follower f INNER JOIN
     AppUser au
     ON f.ToUserId = au.Id
WHERE au.Email = 'xxx@xxx.com';
注意,我引入了表别名作为表名的缩写。这使得查询更易于编写和读取


此外,我建议您在
选择中列出所需的列。如果两个表中的列名称相同,则可能会出现问题。

您可以在
WHERE
子句中引用
AppUsers
。您不需要两个查询:

SELECT f.*, au.*
FROM Follower f INNER JOIN
     AppUser au
     ON f.ToUserId = au.Id
WHERE au.Email = 'xxx@xxx.com';
注意,我引入了表别名作为表名的缩写。这使得查询更易于编写和读取


此外,我建议您在
选择中列出所需的列。如果两个表中的列具有相同的名称,则可能会出现问题。

如果只需要跟随表的列,则还可以使用子查询

SELECT *
FROM  Follower 
WHERE Follower.ToUserId  
IN (SELECT Id FROM AppUser WHERE Email='xxx@xxx.com' )

如果您只需要跟随表的列,那么也可以使用子查询

SELECT *
FROM  Follower 
WHERE Follower.ToUserId  
IN (SELECT Id FROM AppUser WHERE Email='xxx@xxx.com' )

您能提供一些示例数据并解释您到底在寻找什么吗?在follower表中,我们管理朋友关系:在本例中,FromUserId 38跟随表ToUserId中的许多用户ID。因此,我们的想法是获取用户38的朋友列表,然后发送ToUserId电子邮件。您可以提供一些示例数据并解释您到底在寻找什么吗?在follower表中,我们管理朋友关系:在本例中,FromUserId 38跟随ToUserId表中的许多用户ID。因此,我们的想法是获得一个用户38的好友列表,然后获得ToUserId电子邮件