繁体   English   中英

MySQL从两个表中选择

[英]MySQL select from two tables

我有两个表女巫一堆字段[仅需提及]

 - partners
  - id [PRI, int]
  - name [varchar(20)]
  - match [=matches.id]
  - can_call [int]  


 - players
  - registered [0/1]
  - partner [=partners.id]
  - match [=matches.id]

现在,我需要一个查询,该查询将给出一个int :一个伙伴可以呼叫多少个玩家;

为了获得任何伙伴要求进行任何比赛的人数,我使用:

SELECT COUNT(id)
FROM players
WHERE registered=1
  AND partner=PARTNER_ID
  AND match=MATCH_ID

现在,我需要这样的东西:

SELECT (can_call-THE_ABOVE) as free
FROM partners
WHERE match=MATCH_ID

而且我不知道该怎么做:)

这个想法是:为想要的比赛获得想要的合作伙伴的空缺职位,然后减去已经由该伙伴注册用于该比赛的SELECT COUNT(id)个球员。

谢谢! [希望我有道理^ _ ^]

编辑 :我已经解决了(在两个联接答案之前)。 我可能会选择我的解决方案,只是因为它更简单。 但是一旦我想成为MySQL的高级用户,我将进一步研究其他答案,谢谢大家^^

Select P.name
    , P.can_call - Coalesce(Calls.CallCount,0) As CanCall
From partners As P
    Left Join   (
                Select partner, match, Count(*) As CallCount
                From players As P1
                Where registered = 1
                Group By partner, match, 
                ) As Calls
        On Calls.partner = P.id
            And Calls.match = P.match
Where P.match = MATCH_ID

没关系,想通了。 就像我上面的伪代码一样:

SELECT can_call - (SELECT COUNT(id) FROM players WHERE ...) as free
  WHERE match=MATCH_ID AND id=PARTNER_ID

^^

SELECT pa.can_call-COUNT(pl.id)
       AS free
FROM partners pa
  LEFT JOIN players pl
    ON pl.registered=1
      AND pl.partner=pa.id
      AND pl.match=pa.match
WHERE pa.id=PARTNER_ID
  AND pa.match=MATCH_ID
GROUP BY pa.id
       , pa.match

暂无
暂无

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

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