假设我有一个变量'userid',我想从aspnet_Membership和aspnet_AccountProfile表中选择。它们都有列userid,我只想创建一个类似SELECT * FROM aspnet_AccountProfile,aspnet_Membership WHERE UserId = @ UserId的语句,它获取具有BOTH表的匹配用户ID的记录。我该怎么做呢?谢谢!
答案 0 :(得分:2)
这称为JOIN
:
根据您想要的数据,有几种基本类型的连接。这些与集合论/关系代数有关。我将列出最常见的一些:
INNER JOIN
如果要返回两个表都具有匹配UserId的行的每个可能组合,请使用此选项。 表中的某些行可能无法在内部联接中返回。
SELECT * FROM aspnet_AccountProfile INNER JOIN aspnet_Membership
ON aspnet_AccountProfile.UserId = aspnet_Membership.UserId
编写INNER JOIN的另一种方式(如果你想了解联接,我不鼓励):
SELECT * FROM aspnet_AccountProfile, aspnet_Membership
WHERE aspnet_AccountProfile.UserId = aspnet_membership.UserId
当然,要选择所需的特定UserId,可以在 表中添加条件,例如:
AND aspnet_AccountProfile.UserId = @UserId
OR
AND aspnet_Membership.UserId = @UserId
这两个中的任何一个都适用于内连接。
LEFT OUTER JOIN
如果要从查询中的第一个表返回所有行,并且第二个表中的UserId与第一个表中的UserId匹配,请使用此选项。第二个表中的某些行(在这种情况下为成员资格)可能根本不会返回。
SELECT * FROM aspnet_AccountProfile LEFT JOIN aspnet_Membership
ON aspnet_AccountProfile.UserId = aspnet_Membership.UserId
在这种情况下,您必须使用左列缩小条件,否则它将自动转换为内部联接。
WHERE aspnet_AccountProfile.UserId = @UserId
RIGHT OUTER JOIN
这是相当不常见的,因为它通常可以写为LEFT外连接。它就像一个左外连接,但返回关系中第二个表的所有行而不是第一个。
SELECT * FROM aspnet_AccountProfile RIGHT JOIN aspnet_Membership
ON aspnet_AccountProfile.UserId = aspnet_Membership.UserId
FULL OUTER JOIN
如果您需要将AccountProfile中匹配的UserId的所有行与Membership中的相应行相关联,请使用此方法,但还需要知道 表中的哪些行没有匹配另一个。
SELECT * FROM aspnet_AccountProfile FULL OUTER JOIN aspnet_Membership
ON aspnet_AccountProfile.UserId = aspnet_Membership.UserId
只有一个用户获得结果在FULL OUTER JOIN中有点棘手。您必须在两个表中指定NULL或正确的值。
答案 1 :(得分:0)
嗨,
你可以使用
来做到这一点“SELECT * FROM aspnet_AccountProfile ap,aspnet_Membership m WHERE ap.UserId = m.UserId ANB ap.UserId=@UserId“
答案 2 :(得分:0)
你可以通过内部联接来做到这一点。
以下是示例
Select aspnet_Membership.*, aspnet_AccountProfile.* from aspnet_AccountProfile
inner join aspnet_Membership on aspnet_Membership.userid = aspnet_AccountProfile.userid
where aspnet_Membership.UserId=@UserId
这将只获得表中的用户名是常见的记录。
如果您想获取1个表中的记录,可能在其他表中,也可能不在其他表中,那么您必须使用左连接
即
Select aspnet_Membership.*, aspnet_AccountProfile.* from aspnet_AccountProfile
left join aspnet_Membership on aspnet_Membership.userid = aspnet_AccountProfile.userid
where aspnet_Membership.UserId=@UserId
答案 3 :(得分:0)
您可以使用加入。
类似的东西:
Select * from aspnet_AccountProfile INNER JOIN aspnet_Membership
ON aspnet_AccountProfile.UserId = aspnet_Membership.UserId
Where aspnet_AccountProfile.UserId = @UserId
谢谢,
Vamyip
答案 4 :(得分:0)
您可以使用简单的内部联接。