代码之家  ›  专栏  ›  技术社区  ›  The Newbie

从一个表中选择条件在另一个表中的位置?

sql
  •  0
  • The Newbie  · 技术社区  · 6 年前

    这是我的数据库中的表:

    table1             table2    
    ---------|--------  --------|
    UserID   |Type      UserID  |
    ---------|--------  --------|
    user1    |Busy       user1  |
    user2    |Free       user2  |
    user3    |Free       user3  |
    user4    |Busy       user4  |
    

    我想从表1中选择类型为free的所有用户ID。从一个表到另一个表的唯一相关性是它们在两个表中都具有相同的用户ID。

    到目前为止,我拥有的是:

    SELECT UserID
    FROM Data.Users
    INNER JOIN Data.UserType
    ON Data.Users.UserID=Data.UserType.UserID
    

    这只会返回所有userid,其中表1中的userid=表2中的userid。

    我想能够让它也检查用户类型。类似的东西

    SELECT Username FROM Data.Users WHERE TABLE2.UserID = TABLE1.UserID AND                        
    TABLE2.UserType = "free"
    

    我对SQL不太熟悉,所以我觉得我也没用google搜索正确的东西。

    2 回复  |  直到 6 年前
        1
  •  2
  •   forpas    6 年前

    因此,您的查询正在工作,您只需要筛选它:

    SELECT Data.Users.Name
    FROM Data.Users
    INNER JOIN Data.UserType
    ON Data.Users.UserID=Data.UserType.UserID
    WHERE Data.UserType.Type = 'Free'
    
        2
  •  1
  •   cmprogram    6 年前

    在本例中,您必须确保首先选择所需的数据“类型”。所以这就是我们在选择信息时需要关注的全部内容。但是,为了说明目的(以及一般的良好礼仪),我们也可以选择用户ID,但我们将从表1中获取它。

    所以我们想从表2中选择类型,从表1中选择用户ID,但是在两个表中,用户ID是相同的。

    要执行我们需要执行的操作,请执行以下操作:

    SELECT two.Type, one.UserID FROM table2 two INNER JOIN table1 one ON two.UserID = one.UserID
    

    这将从表2中选择信息,并将其指定为引用2。然后我们连接表1并分配引用表。然后,我们可以使用分配的引用在select中获取请求的信息,同时确保在两个表具有相同值的情况下连接数据。

    上面的示例将选择用户ID匹配的所有值,并用于说明目的。然后,要缩小范围,您所要做的就是指定在此之上的Where值。所以:

    SELECT two.Type, one.UserID FROM table2 two INNER JOIN table1 one ON two.UserID = one.UserID WHERE two.Type = "Free"