SQL: выбор из многих, многих через объединенные по условиям в сквозной таблице. - PullRequest
1 голос
/ 24 февраля 2010

Не могу разобраться с этим ...

У меня есть 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

Я пытаюсь создать представление, которое будет выводить по одной строке для каждой записи в Компьютерах и присоединять строку «Пользователи» через MAX (NumberOfLogins) в ComputerLogins.

Желаемый вывод:

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

Можете ли вы предложить запрос на просмотр, который даст желаемый результат? Спасибо!

Ответы [ 2 ]

1 голос
/ 24 февраля 2010
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

Обтекание в виде и т. Д.

1 голос
/ 24 февраля 2010

Использование:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...