如何使用两个表中的一个变量从两个表中提取数据?

时间:2011-02-01 05:41:52

标签: c# asp.net sql

假设我有一个变量'userid',我想从aspnet_Membership和aspnet_AccountProfile表中选择。它们都有列userid,我只想创建一个类似SELECT * FROM aspnet_AccountProfile,aspnet_Membership WHERE UserId = @ UserId的语句,它获取具有BOTH表的匹配用户ID的记录。我该怎么做呢?谢谢!

5 个答案:

答案 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)

您可以使用简单的内部联接。