mysql中的每个单独的id计数在两个带连接查询的表中

时间:2013-03-26 12:06:04

标签: mysql sql select join

我有两张桌子,

TABLE_1

id  team_id  fav_id
1    10        1
2    10        6
3    11        5
4    12        5
5    12        1
6    25        6

TABLE_2

league_id   team_id   name
100          10        a 
100          11        b
100          12        c
100          13        d
101          25        e

我需要team_id的所有league_id = 100table_2 join以及count fav_id team_id的结果table_1league_id team_id name count of(fav_id) ------------------------------------------------- 100 10 a 2 100 11 b 1 100 12 c 2 100 13 d 0 中的单个查询中。

期待结果,

{{1}}

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

SELECT
    table_2.league_id,
    table_2.team_id,
    table_2.name,
    (SELECT COUNT(*) FROM table_1 WHERE table_1.team_id=table_2.team_id)
FROM
    table_2
WHERE
    table_2.league_id=100

答案 1 :(得分:1)

由于您要列出没有 fav_id 的列表中的所有team_id,您需要使用LEFT JOIN加入两个表。使用LEFT JOIN的原因是因为它返回表中在连接的左侧上定义的所有行,无论它在右表上是匹配还是什么都没有。

SELECT  a.league_ID, a.team_ID, 
        COUNT(b.team_ID) totalFAV,
        a.Name
FROM    table2 a
        LEFT JOIN table1 b
            ON a.team_ID = b.team_ID
WHERE   a.league_ID = 100
GROUP   BY a.league_ID, a.team_ID, a.Name

要进一步了解联接,请访问以下链接:

输出

╔═══════════╦═════════╦══════════╦══════╗
║ LEAGUE_ID ║ TEAM_ID ║ TOTALFAV ║ NAME ║
╠═══════════╬═════════╬══════════╬══════╣
║       100 ║      10 ║        2 ║ a    ║
║       100 ║      11 ║        1 ║ b    ║
║       100 ║      12 ║        2 ║ c    ║
║       100 ║      13 ║        0 ║ d    ║
╚═══════════╩═════════╩══════════╩══════╝

答案 2 :(得分:1)

SELECT a.`league_id`, a.`team_id`, a.`name`, COUNT(b.id)
FROM table_2 a
LEFT JOIN table_1 b
    ON a.team_id = b.team_id
WHERE a.league_id = 100
GROUP BY a.team_id

我认为这有用。

这是一个小提琴

http://sqlfiddle.com/#!2/e8892/2