首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql选择匹配结果

mysql选择匹配结果
EN

Stack Overflow用户
提问于 2012-03-21 04:20:09
回答 2查看 128关注 0票数 1

我正在尝试找到两个用户属于的联盟(lid)。

下面是我的表格:

表联盟:

代码语言:javascript
复制
*id*    lname
--------------
 1      Hard C
 3      Fun
 5      Crazy

表匹配:

代码语言:javascript
复制
*userid*   *lid* 
-----------------
   1         1
   4         5
   1         3
   2         1
   4         1
   4         3

*是主键

match.lidleagues.id的外键(一个用户不能两次属于同一个联盟)

这是我到目前为止所做的(一个开始):

代码语言:javascript
复制
SELECT t1.lid, t2.lname 
FROM match t1
JOIN leagues t2 on t1.lid = t2.id

到目前为止,我成功地连接了这两个表,并获得了名称。我的最终目标是展示两个用户属于同一联盟的lid,比如userid 1和4。

userid 1是lid 1和3的成员

userid 4是lid 5、1和3的成员

两个用户在联盟(lid)1和3相遇

因此,我需要一个仅显示两个用户相遇的联盟的查询。如下所示:

代码语言:javascript
复制
lid    lname
--------------
 1      Hard C
 3      Fun

由于userid 1和4在联盟1和3相遇,因此结果应该表明这一点。我可以为每个用户运行两个查询,并通过php检查两个用户遇到的联盟,但我认为运行一个查询会更有效率。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-21 04:37:10

代码语言:javascript
复制
SELECT m1.lid, l.lname FROM 
`match` m1, `match` m2, leagues l
WHERE m1.lid = m2.lid AND m1.lid = l.id 
  AND m1.userid = 1 
  AND m2.userid = 4
票数 0
EN

Stack Overflow用户

发布于 2012-03-21 04:34:42

有几种方法。最简单的是:

代码语言:javascript
复制
SELECT id AS lid,
       lname
  FROM leagues
 WHERE id IN
        ( SELECT lid
            FROM match
           WHERE userid = 1
        )
 AND id IN
        ( SELECT lid
            FROM match
           WHERE userid = 4
        )
;

另一种方法是使用JOIN,这种方法不那么直接,但性能可能会更好-您可以尝试一下

代码语言:javascript
复制
SELECT id AS lid,
       lname
  FROM leagues
  JOIN match AS match1
    ON match1.lid = leagues.id
   AND match1.userid = 1
  JOIN match AS match2
    ON match2.lid = leagues.id
   AND match2.userid = 4
;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9794275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档