2010-10-18 75 views
0

我有兩個表,UsersSample和UsersSearching。 UsersMain是大多數可用用戶的表格。 UsersSearching是在網站上搜索過的任何用戶的表格。如何在兩個SQL表中找到匹配項?

我想確定一個來自USersSample的用戶是否已經搜索過(並且出現在UsersSearching表中)。但即使開始這個SQL查詢,我也遇到了困難。任何人都可以提出建議並指向正確的方向嗎?

回答

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

這將導致兩個表中存在的用戶列表。

+2

+1 - 做一個相反的操作,只需要將一個'SELECT [column] FROM UsersSample WHERE UserID NOT IN'然後用括號括起Gabriel的查詢並將'。*'改爲'.userid' 。 – JNK 2010-10-18 19:41:44

+0

NOT IN在Jet/ACE中沒有很好的優化,並且通常無法在比較的一側或兩側使用索引。 – 2010-10-19 22:48:36

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,則該用戶還沒有搜查,

0

首先,您需要定義哪些字段用於匹配兩個表中的記錄。例如,如果有兩個表在一個共同的用戶ID字段,查詢可以使用這兩種形式中的一種:

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) 

如果您需要使用兩個或多個列,以確定比賽中,你可以使用修改版本上面顯示的第二個和第三個選項。

0

UsersSearching是所有在網站上搜索的用戶的表格。

我試圖確定一個來自USersSample的用戶是否已經搜索過(並且 出現在UsersSearching表中)。

所以,我需要你的問題澄清,你想他們已經搜查時知道UserSample被添加到UserSerching或你認識的添加,只是想看看用戶在兩種USersSampleUsersSearching?如果是1st,那將比第二個SQL查詢更像測試。

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

SELECT是你想看看在2頁不同的表,所以你需要JOIN他們想要UserID FROM列(S)和一個JOIN你需要ON爲指針 ON [table.column]USerSample.UserID並顯示結果相等=UserSearching.UserID

相關問題