只是想要确认,以确保我在尝试之前做到这一点。加入时有点弱。
我有三张桌子:
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%'
);
答案 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子句可以直接在该组信息中调出您要查找的内容。