0

我有两张桌子,

表格1

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

表_2

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

我需要在单个查询中为每个in提供所有team_idwith league_id = 100fromtable_2joinwith countof的结果。fav_idteam_idtable_1

期待结果,例如,

league_id   team_id  name  count of(fav_id)
-------------------------------------------------
100          10       a          2
100          11       b          1
100          12       c          2
100          13       d          0

任何想法?

4

3 回答 3

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
于 2013-03-26T12:10:55.217 回答
1

由于您想列出team_id没有fav_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    ║
╚═══════════╩═════════╩══════════╩══════╝
于 2013-03-26T12:14:28.117 回答
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

于 2013-03-26T12:15:03.190 回答