【问题标题】:SQL: Select from many-many through, joined on conditions in through tableSQL:从多对多中选择,通过表中的条件加入
【发布时间】:2010-02-24 18:36:21
【问题描述】:

无法理解这个......

我有 3 个这样的表:

Computers
---------
Id
Name


ComputerLogins
--------------
Computer_Id
User_Id
NumberOfLogins


Users
-----
Id
Name

计算机通过“ComputerLogins”“拥有并属于许多”用户。

样本数据:

Computers:                  Id     Name
                             1  "Alpha"
                             2   "Beta"
                             3  "Gamma"

Users:                      Id     Name
                             1    "Joe"
                             2   "Fred"

ComputerLogins:    Computer_Id  User_Id  NumberOfLogins
                             1        1               5
                             1        2              12
                             2        1              10
                             2        2               6
                             3        1               2
                             3        2               4

我正在尝试构建一个视图,该视图将为 Computers 中的每条记录输出一行,并通过 ComputerLogins 中的 MAX(NumberOfLogins) 加入用户行。

期望的输出:

Computer_Id    User_Id    NumberOfLogins
          1          2                12
          2          1                10
          3          2                 4

您能否建议一个可以产生所需输出的视图查询? 谢谢!

【问题讨论】:

    标签: sql sql-server join


    【解决方案1】:
    SELECT
        CL.*, U.* --change this as needed
    FROM
        (
        SELECT 
           Computer_ID, MAX(NumberOfLogins) AS NumberOfLogins
        FROM
           ComputerLogins
        GROUP BY
           Computer_ID
        ) maxC
        JOIN
        ComputerLogins CL On maxC.Computer_ID = CL.Computer_ID AND maxC.NumberOfLogins = CL.NumberOfLogins
        JOIN
        Users U On CL.User_ID = U.ID
    

    包裹在视图中等

    【讨论】:

      【解决方案2】:

      用途:

      CREATE VIEW your_view AS 
       SELECT c.id AS computer_id,
              u.id AS user_id,
              COUNT(*) AS NumberOfLogins
         FROM COMPUTERS c
         JOIN COMPUTERLOGINS cl ON cl.computer_id = c.id
         JOIN USERS u ON u.id = cl.user_id
      GROUP BY c.id, u.id
      

      【讨论】:

        猜你喜欢
        • 2010-12-31
        • 1970-01-01
        • 1970-01-01
        • 2013-11-13
        • 2021-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多