0

私は2つのテーブルを持っています

表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

単一のクエリでfor eachのfromとteam_idwithのall の結果が必要です。league_id = 100table_2joincountfav_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

fav_idteam_idなしでリストのすべてをリストしたいので、 を使用して両方のテーブルを結合する必要があります。使用する理由は、両方のテーブルが結合の左側で定義するすべての行を、右側のテーブルに一致があるかどうかにかかわらず返すためです。LEFT JOINLEFT 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 に答える