从1个表中选择,条件在另一个表中?

时间:2019-01-02 23:04:54

标签: sql

这是我数据库中的表:

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

我想从Table1中选择所有用户ID,其中Type = Free。从一个表到另一个表的唯一关联是两个表中的用户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的新手,所以我也不认为我在搜索正确的事情

2 个答案:

答案 0 :(得分:2)

因此您的查询正在运行,您只需要对其进行过滤:

SELECT Data.Users.Name
FROM Data.Users
INNER JOIN Data.UserType
ON Data.Users.UserID=Data.UserType.UserID
WHERE Data.UserType.Type = 'Free'

答案 1 :(得分:1)

您必须确保首先选择所需的数据,在这种情况下为“类型”。因此,这就是我们选择信息时需要考虑的所有问题。但是,出于说明目的(以及一般的良好礼节),我们还选择了userID,但我们将从表1中获取它。

因此,我们要从表2中选择类型,并从表1中选择用户ID,但是两个表上的用户ID相同。

要执行以下操作,请执行以下操作:

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

这将从表2中选择信息,我们将其指定为参考2。然后,我们加入table1并分配引用之一。然后,我们可以使用分配给我们的引用在选择中获取所需的信息,同时确保在两个表具有相同值的地方连接数据。

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

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