SQL查询涉及三个表并检查某些结果是否在另一个表中有条目

时间:2009-12-04 04:01:10

标签: sql

我的SQL数据库中有3个表,如下所示

Users2

UserID,
EID,
Name,
Email,
Department,
Enabled

Sites

SiteID,
SiteCode,
SiteName

UserSites2

UsersSitesID,
UserID,
SiteID

我需要做的是,在EIDSiteID的情况下,从Users2表和SiteIDSiteCode和{获取一整行来自SiteName表的{1}}当检索到的记录的SitesuserID

中有条目时

预期结果的示例:

UserSites2

Users2

1, 12345, Me, me@email.com, Support, True 2, 12346, you, you@email.com, Service, True

Sites

1, 123, Regional HQ 2, 234, National HQ

UserSites2

所以给定1, 1, 1 2, 1, 2 3, 2, 2 EID12345 SiteID我应该得到结果

2

以及1, 12345, Me, me@email.com, Support, True, 2, 234, National HQ EID12346 SiteID我什么都没得到

我知道如何加入1Users2以获取我想要的完整行但我不明白如何使它取决于查找表中是否有条目。

4 个答案:

答案 0 :(得分:1)

    select u2.UserID, u2.EID, u2.Name, u2.Email, u2.Department, u2.Enabled, 
           s.SiteID, s.SiteCode, s.SiteName
    from users2 u2
        left outer join usersites us on u2.UserID = us.UserID 
        left outer join sites s on s.SiteID = us.SiteID 
    where u2.EID = 12345  and us.SiteID = 2

我测试了这个。如果未在UserSites中映射,它将不会给您任何记录。所以对于EID 12346和SiteID 1,你什么也得不到。

答案 1 :(得分:0)

你会做这样的事情:

select col1,col2,.....from Users, Sites, UserSites 
where Users.eid = 12345 and Sites.siteid = 2 
  and users.user_id = userSites.userid 
  and sites.siteis = usersites.siteid

答案 2 :(得分:0)

我喜欢在可能的情况下专门列出联接。我相信这样的事情会奏效:

select u2.UserID, u2.EID, u2.Name, u2.Email, u2.Department, u2.Enabled,
       s.SiteID, s.SiteCode, s.SiteName
from Users2 u2 join UserSites2 us2 on u2.UserID=us2.UserID 
     join sites s on us2.SiteID=s.SideID
where u2.EID=<eid> and 
      us2.SiteID=<siteid>

答案 3 :(得分:0)

  

我知道如何加入Users2和Sites以获得我想要的完整行,但我不明白如何使它依赖于查找表中有一个条目。

使用LEFT JOIN意味着可能没有基于连接条件的支持记录。如果缺少记录,您将在适当的列中看到null。如果您只想根据条件返回行,请使用[INNER] JOIN。这是一个good link,显示了JOIN之间的差异,它包括UNION。

这是您的查询:

SELECT u.userid,
       u.eid,
       u.name,
       u.email,
       u.department,
       u.enabled,
       s.siteid,
       s.sitecode,
       s.sitename
  FROM USERS2 u
  JOIN USERSITES2 us ON us.userid = u.userid
  JOIN SITES s ON s.siteid = us.siteid
 WHERE u.eid = ?
   AND us.siteid = ?