Выбор записи из двух таблиц с пределом соединения INNER 3 - PullRequest
1 голос
/ 04 августа 2011

У меня есть записи в двух таблицах, как показано ниже

Table1
userid    email
1        123@qwe.com
4        qwe@sdf.cok
5        sad@fgdf.sdf
7        dsvh@dsf.we
9        fdsdf@fgh.hh

.

Table 2
userid    values
1        15
1        45
1        76
1        15345
4        4545
4        76788
4        15879
5        4534
5        76345
5        15678
5        4567
5        7667789
7        15
7        456786
7        76678
7        15678
9        45789
9        76789
9        15789
9        4557
9        7667
9        1556
9        4556
9        764

Теперь я хочу получить первые 3 записи из table1 с идентификатором пользователя в порядке убывания вместе с table2 связанными с ними записями

Ответы [ 3 ]

0 голосов
/ 04 августа 2011
SELECT *
FROM (SELECT TOP 3 * FROM Table1) AS Table1 INNER JOIN
     Table2 ON Table1.userid = Table2.userid
ORDER BY Table1.userid
0 голосов
/ 04 августа 2011
SELECT * FROM (
  SELECT t1.userid, t1.email, group_concat(t2.`values`) as t2values
  FROM table1 t1
  INNER JOIN table2 t2 ON (t1.userid = t2.userid)
  GROUP BY t1.userid
  ORDER BY t1.userid ASC
  LIMIT 3 ) subselect
ORDER BY subselect.userid DESC

Пояснение:
Group_concat - агрегатная функция, которая составляет список значений, разделенных запятыми.
Поскольку вы используете агрегатную функцию, вам нужно сгруппировать по идентификатору пользователя.
limit 3 выбирает первые 3 идентификатора пользователя (потому что вы заказали ASC)
Затем внешний выбор поднимает все 3 строки и меняет порядок на DESC.

Ссылки
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

0 голосов
/ 04 августа 2011
    SELECT a.userid, a.email, b.values 
    FROM table1 a
    INNER JOIN table2 b ON a.userid = b.userid
    ORDER BY a.userid asc
    LIMIT 0,3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...