查询三个表之间的数据

时间:2016-12-12 22:50:08

标签: sql sql-server

只是想要确认,以确保我在尝试之前做到这一点。加入时有点弱。

我有三张桌子:

USER                     PERSONGROUPTOPERRSON            PERSONGROUPS
    id                     userId                          groupID
    firstName              groupId                         groupName
    lastName          
    lastUpdated

我需要所有属于"志愿者"在组名中。

此查询是否正确?

SELECT
    a.firstName, a.lastName, a.lastUpdated
FROM
    user as a, persongrouptoperson as b
INNER JOIN ON
    a.id = b.userId
WHERE
    b.groupId
IN 
    (SELECT
        groupID
     FROM
        persongroups
     WHERE
        groupName like '%volunteer%'
     );

3 个答案:

答案 0 :(得分:1)

SELECT
    a.firstName, a.lastName, a.lastUpdated
FROM
    user as a
INNER JOIN  persongrouptoperson as b ON
    a.id = b.userId
INNER JOIN persongroups as c ON
    b.groupID = c.groupID
WHERE c.groupName like '%volunteer%'

答案 1 :(得分:1)

您可以使用内部联接执行此操作。我添加了不同之处,以防您的用户可以在多个组中使用志愿者一词。我还建议为表而不是a,b,c使用更直观的别名。

select distinct
   u.firstName
 , u.lastName
 , u.lastUpdated
from User as u
  inner join PersonGroupToPerson as pgp on u.id = pgp.userId
  inner join PersonGroup as pg on pgp.groupId = pg.groupId
where pg.GroupName like '%volunteer%'

答案 2 :(得分:1)

不完全是。试试这样:

SELECT user.firstname, user.lastname, user.lastupdated
FROM user
INNER JOIN persongrouptoperson ON user.id = persongrouptoperson.userid
INNER JOIN persongroups ON persongrouptoperson.groupid = persongroups.groupid
WHERE groupName like '%volunteer%'

想法是将所有三个表连接在一起。你可以通过内部连接简单地完成这项工作。您只需链接公共密钥即可。因此,例如,用户表中的用户标识字段与人员组到人员表中的用户标识字段匹配。然后,人员组表中的组ID字段与人员组到人员表中的组ID字段匹配。将它们与ON语句联系起来。

表格链接后,您可以想象每一行都包含用户信息和组信息。因此,您的where子句可以直接在该组信息中调出您要查找的内容。