Правое внешнее соединение в MySQL - PullRequest
0 голосов
/ 04 февраля 2011

У меня есть две таблицы: Users и Files.

Таблица пользователей имеет 10 строк, таблица файлов - 450 строк, в которой есть столбец для идентификаторов пользователя (UserID).

Я хочу запросить список всех людей и файлов, которые они загрузили в последний раз. Таблица файлов имеет поле LastDownloadTime, которое имеет тип DateTime.

Это мой SQL-запрос;

Select
    Users.Name , Files.Name
FROM Users
RIGHT OUTER JOIN Files on Users.ID = (
    Select Files.UserID
    FROM Files
    ORDER BY LastDownloadTime DESC Limit 1
)

Над запросом возвращаются все пользователи и файлы. Какой должен быть правильный запрос для этого?

Ответы [ 3 ]

2 голосов
/ 04 февраля 2011

Вы можете сделать это:

Select
    u.Name,
    (Select f.Name from Files f where u.ID = f.ID order by LastDownloadDate LIMIT 1)
FROM Users u
1 голос
/ 04 февраля 2011

См. Эти:

 SELECT Users.Name , Files.Name 
    FROM Users 
    RIGHT OUTER JOIN
    ( SELECT Files.Name 
      FROM Files 
      INNER JOIN
          ( SELECT TOP 1 Files.UserID ,Max(LastDownloadTime ) as LastDownloadTime 
                    FROM Files 
                    ORDER BY LastDownloadTime DESC,Files.UserID  ) as f2
  ON Files.UserID  = f2.UserID  AND Files.LastDownloadTime  = f2.LastDownloadTime 
   ) as f  ON Users.ID = f.UserID
0 голосов
/ 04 февраля 2011

Вы уверены в правильном присоединении? Ваш вопрос кажется другим.

Select 
    Users.Name 
    ,f2.Name 
FROM 
    Users  
        JOIN (SELECT userid, MAX(lastdownloadtime) AS latest FROM Files GROUP BY userid) f1 ON f1.userid = Users.id
        JOIN Files f2 ON (Users.ID = f2.userid AND f2.lastdownloadtime = f1.latest);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...