Sql 在三个表之间查询数据
只是想在我尝试之前确认一下我做的是否正确。连接有点弱 我有三张桌子:Sql 在三个表之间查询数据,sql,sql-server,Sql,Sql Server,只是想在我尝试之前确认一下我做的是否正确。连接有点弱 我有三张桌子: USER PERSONGROUPTOPERRSON PERSONGROUPS id userId groupID firstName groupId groupName lastN
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%'
);
可以使用内部联接来执行此操作。我添加了distinct,以防您的用户可以在多个组中使用“志愿者”一词。我还建议对表使用更直观的别名,而不是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%'
不完全是。试着这样做:
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%'
想法是将所有三个表连接在一起。通过内部联接,您可以非常简单地实现这一点。您只需链接常用键即可。例如,user表中的userid字段与person-group-to-person表中的userid字段相匹配。然后,person groups表中的group id字段与person group to person表中的group id字段匹配。将它们与ON语句链接
链接表后,您可以想象每一行都包含用户信息和组信息。因此,where子句可以直接调用您在该组信息中要查找的内容。运行它时是否有效?出于多种原因,我还没有尝试过。这就是为什么我希望专家们在我尝试之前仔细检查一下。这只是一个精选语句,如果你运行它失败了,就不会有什么不好的事情发生。更直观的别名也是一个好主意,正如其他答案之一所提到的。
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%'