内部联接以及如何避免重复操作

时间:2018-08-23 10:32:30

标签: sql sql-server

要获取我想要的信息,我总是必须执行两个步骤。我很确定有可能避免这种情况。这就是我目前所需要的信息的方式:

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。

我想让查询答案直接用电子邮件搜索。

非常感谢

4 个答案:

答案 0 :(得分:2)

将第二个查询的WHERE更改为:

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

答案 1 :(得分:1)

您将where语句放入主查询怎么样?

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

答案 2 :(得分:1)

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

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

请注意,我引入了表别名作为表名的缩写。这使查询更易于编写和阅读。

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

答案 3 :(得分:1)

如果仅需要Follower表的列,则也可以使用子查询。

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