根据另一个表的内容在SQL中选择记录

时间:2009-11-09 19:48:36

标签: sql

我对SQL有点新,并且在构造select语句时遇到了麻烦。我有两张桌子:

Table users
    int id
    varchar name

Table properties
    int userID
    int property

我希望所有具有特定属性的用户记录。有没有办法在一个SQL调用中获取它们,还是我需要首先从属性表中获取所有用户ID,然后单独选择每个用户?

5 个答案:

答案 0 :(得分:9)

使用JOIN

SELECT U.id, U.name, P.property FROM users U
INNER JOIN properties P ON P.userID = U.id
WHERE property = 3

答案 1 :(得分:8)

如果您想要选择每个用户只有一个属性行,我认为这就是您想要的:

 select
     users.*
 from
     users,
     properties
 where
     users.id = properties.userID
     and properties.property = (whatnot);

如果您有多个匹配“whatnot”的属性行,并且您只需要一个属性行,则根据您的数据库系统,您要么需要左连接,要么需要一个distinct子句。

答案 2 :(得分:3)

查看JOIN命令。您可以编写如下查询:

SELECT
    name
FROM
    users u
    INNER JOIN properties p
        ON u.id = p.userID
WHERE
    p.property = <some value>

答案 3 :(得分:3)

SELECT [Name] FROM Users u 
JOIN Properties p on p.UserID=u.ID
WHERE p.Property=1

显然,这取决于您使用的RDBMS和SQL的风格。

答案 4 :(得分:3)

您正在寻找JOIN个表格。

假设id和userID列具有相同的含义,它就像这样:

select u.name
from users u inner join properties p
on u.id = p.userID
where p.property = :ValueToFind