我有2个表 - 用户表(tblUsers
)和日志表(tblLogs
)。
用户表包含 - UserID
和UserName
。
日志表包含 - UserID
,ApplicationID
,ApplicationName
,LogonDateTime
我想选择所有用户并查找他们是否访问过特定应用程序(例如ApplicationID = 3
)
预期输出
UserID, UserName, Status
状态 - 如果他已访问过applicationID = 3
。
答案 0 :(得分:0)
我希望这个查询可以让您了解您的具体要求是什么:
SELECT u.UserID,
u.UserName,
(SELECT (CASE
WHEN COUNT(*) > 0 THEN
'VISITED'
ELSE
NULL
END)
FROM tblLogs l
WHERE u.UserId = l.UserId
AND l.ApplicationID = '3')
AS status
FROM tblUsers u
请注意,根据您使用的数据库,UserName和ApplicationName上的group by可能是可选的。
答案 1 :(得分:0)
由于您缺少包含所有可用应用程序的第三个表(我猜它是[tblApplications]
),因此sql将是:
SELECT
U.UserID
, U.UserName
, (
CASE WHEN L.ApplicationID IS NOT NULL
THEN '1'
ELSE '0'
END
) AS Status
FROM tblUsers AS U, tblApplications AS A
LEFT OUTER JOIN tblLogs AS L
ON A.ID = L.ApplicationID
WHERE A.ID = '3'
答案 2 :(得分:0)
使用CASE
表达式检查状态。
<强>查询强>
select t1.UserId, t1.UserName,
max(case when t1.UserId in
(select UserId from tblLogs where ApplicationID = 3) then 'Visited'
else 'Not Visited' end) as `status`
from tblUsers t1
left join tblLogs t2
on t1.UserID = t2.UserID
group by t1.UserId, t1.UserName;