【问题标题】:Selecting records in SQL based on another table's contents根据另一个表的内容在 SQL 中选择记录
【发布时间】:2010-12-14 18:27:03
【问题描述】:

我对 SQL 有点陌生,在构建 select 语句时遇到了麻烦。我有两张桌子:

Table users
    int id
    varchar name

Table properties
    int userID
    int property

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

【问题讨论】:

    标签: sql


    【解决方案1】:

    使用JOIN

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 史蒂夫,不要学习这种过时的语法。学习使用显式连接。
      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        您正在寻找JOIN 表格。

        假设 id 和 userID 列的含义相同,是这样的:

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

        【讨论】:

          【解决方案5】:

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

          显然,这取决于您使用的是哪种类型的 RDBMS 和 TSQL。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-12-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-04-30
            • 1970-01-01
            相关资源
            最近更新 更多