繁体   English   中英

在MySQL中连接两个表时在一个表上使用限制

[英]using a limit on one table when joining two tables in mysql

在这种情况下,如何正确地使用限制和联接来编写sql语句?

SELECT  u.userName, u.userFriends, u.userJoined, f.freindName (only 3) 
FROM    user u inner join friends f ON u.userId = f.addedUserId 
WHERE   u.userId=1 
AND     f.userId=1

我试过了

SELECT  u.userName, u.userFriends, u.userJoined, group_concat(f.freindName) 
FROM    user u inner join friends f ON u.userId = f.userId 
WHERE   u.userId = 1 and f.addedUserId = 1 
GROUP   by u.userName limit 5 /* but this does not work */

您可以将f.freindName to 3限制f.freindName to 3

'gid'  | 'userName'  | 'userId' |   'userFriends'   |'userJoined'
-------|-------------|----------|-------------------|--------------
'1'    | 'Jason'     | '1'      |   '5'             |'14-Aug-2014'


'gid'  | 'friendName'|  'thisUserId'    |'addedUserId'
-------|-------------|------------------|-----------------
'1'    | 'James'     |  '2'             |'1'
'2'    | 'Lars'      |  '3'             |'1'
'3'    | 'Kirk'      |  '4'             |'1'
'4'    | 'Rob'       |  '5'             |'1'
'5'    | 'Dave'      |  '5'             |'1'

我假设用户表和朋友表由userId和addedUserId列联接。 而且我进一步假设您想要一个用户userId = 1的用户的三个朋友的列表。

您可以使用子选择来使用派生表,以获得所需的结果:

SELECT  u.userName, u.userFriends, u.userJoined, group_concat(f.friendName) 
FROM    user u 
INNER JOIN (
    SELECT
        userId,
        friendName
    FROM
        friends
    LIMIT 3
) f
ON u.userId = f.addedUserId 
WHERE   u.userId = 1
GROUP   by u.userName

应该管用。

这是您要查找的查询。 我认为字段名称存在一些问题(例如,使用f.freindName而不是f.friendname ),但是f.friendname修复,这应该可以工作

SELECT  u.userName, u.userFriends, u.userJoined, f.freindName 
FROM    user u inner join friends f ON u.userId = f.userId 
   (SELECT  DISTINCT f.freindName 
    FROM    user u2 inner join friends f2 ON u2.userId = f2.userId
    WHERE u2.userId = u.userId
    LIMIT 3) as f
WHERE   u.userId=1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM