如何在两个SQL表中找到匹配项?

时间:2010-10-18 17:08:01

标签: sql ms-access

我有两个表,UsersSample和UsersSearching。 UsersMain是大多数可用用户的表。 UsersSearching是在网站上搜索过的所有用户的表格。

我正在尝试确定来自USersSample的用户是否已搜索(并显示在UsersSearching表中)。但是我甚至难以开始这个SQL查询。任何人都可以建议并指出我正确的方向吗?

4 个答案:

答案 0 :(得分:5)

SELECT
    us.*
FROM UsersSample us
INNER JOIN UsersSearching uss ON uss.UserId = us.UserId

这将导致BOTH表中存在的用户列表。

答案 1 :(得分:0)

您可以使用LEFT OUTER JOIN来确定哪些用户在UserSearching表中有记录:

select distinct u.UserID, us.UserID as HasSearchedUserID
from User u
left outer join UserSearching us on u.UserID = us.UserID

如果HasSearchedUserIDNULL,则该用户尚未搜索

答案 2 :(得分:0)

首先,您需要定义用于匹配两个表中记录的字段。例如,如果两个表中有一个共同的UserID字段,您的查询可以使用以下两种形式之一:

SELECT * FROM UsersSample WHERE UserID IN (SELECT UserID FROM UsersSearching)

SELECT UsersSample.* FROM UsersSample INNER JOIN UsersSearching
   ON UsersSample.UserID = UsersSearching.UserID

SELECT * FROM UsersSample WHERE EXISTS 
   (SELECT * FROM UsersSearching WHERE UsersSearching.UserID = UsersSample.UserID)

如果您需要使用两列或更多列来确定匹配项,则可以使用上面显示的第二个和第三个选项的修改版本。

答案 3 :(得分:0)

  

UsersSearching是在网站上搜索过的所有用户的表格。

     

我正在尝试确定来自USersSample的用户是否已搜索过(和   出现在UsersSearching表中。

因此,我需要澄清您的问题,您想知道UserSample是否在搜索时添加到UserSerching,或者您知道是否已添加,并且只想查看两者中的用户USersSampleUsersSearching?如果是1st,那将是一个测试事物,而不是SQL Query for 2nd。

SELECT UserID
FROM USersSample JOIN UserSearching
    ON USersSample.UserID = UserSearching.UserID

SELECT是您想要的列UserID FROM您希望查看2个不同的表,因此您需要JOIN这些表,并且JOIN需要ON作为指针 ON [table.column]依据USerSample.UserID显示结果=UserSearching.UserID