用于检查加入记录是否存在的SQL查询

时间:2016-02-11 07:17:08

标签: sql

我有2个表 - 用户表(tblUsers)和日志表(tblLogs)。

用户表包含 - UserIDUserName

日志表包含 - UserIDApplicationIDApplicationNameLogonDateTime

我想选择所有用户并查找他们是否访问过特定应用程序(例如ApplicationID = 3

预期输出

UserID, UserName, Status

状态 - 如果他已访问过applicationID = 3

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;

SQl Fiddle Demo