我的数据库中有以下表格
包含用户的表格:
---------------------
| userId | username |
---------------------
| 1 | john doe |
| 2 | jane doe |
---------------------
“兴趣”列表
---------------------
| intId | interest |
---------------------
| 1 | books |
| 2 | cars |
---------------------
我保存用户感兴趣的表格
--------------------
| userId | intId |
--------------------
| 1 | 1 |
| 1 | 2 |
| 2 | 1 |
--------------------
现在我还有一个网页,我可以在其中选择一个或多个兴趣。基于我想要的 检索具有这些兴趣的用户。
所以假设我选择“书籍”和“汽车”。然后我应该得到两条记录,“jonh doe”和“jane doe”。
但问题是我不确定如何为此创建查询。我可以做一个简单的LEFT JOIN
。但是之后
我会得到3条记录。由于“john doe”对“书籍”和“汽车”感兴趣。但我希望每个用户都只出现
一次在结果中。
那么我应该如何创建此查询呢?
答案 0 :(得分:0)
Select username
from users u
join
(
Select distinct userid
from table
where intid in (1,2)
)t
on t.userid = u.serid
答案 1 :(得分:0)
如果您正在使用兴趣名称,则应使用DISTINCT
执行此类操作:
SELECT DISTINCT u.UserName
FROM Users u
INNER JOIN UserInterests ui ON ui.userId = u.userId
INNER JOIN Interest i on i.intId = ui.intId
WHERE i.Interest in ('books', 'cars')
如果您想根据兴趣ID进行操作:
SELECT DISTINCT u.UserName
FROM Users u
INNER JOIN UserInterests ui ON ui.userId = u.userId
WHERE ui.intId in (1,2)
答案 2 :(得分:0)
SELECT *,
STUFF((SELECT DISTINCT ','+u.username
FROM dbo.UserInterests ui
INNER JOIN dbo.[user] u ON u.userid = ui.UserId
WHERE ui.IntId=i.intId
FOR XML PATH('')),1,1,'')
FROM dbo.Interests i
答案 3 :(得分:0)
以下是我首选的方法,它应该比在查询中使用SELECT DISTINCT运行得快一点。
SELECT U.UserName
FROM Users AS U
WHERE
EXISTS(
SELECT 1
FROM UserInterests AS UI
INNER JOIN Interest I on I.intId = UI.intId
WHERE UI.userId = U.userId
AND I.Interest in ('books', 'cars')
)
答案 4 :(得分:0)
试试这个:
SELECT DISTINCT U.UserName
FROM Users AS U INNER JOIN
UserInterest AS UI ON U.userId = UI.userId INNER JOIN
Interests AS I ON UI.intId = I.intId