12992


以下の2つのようなテーブル(table1、table2)があるときに、  
table2に対してtable1のid毎の登録数でソートした結果(table3)を出したいのですが、SQLだけで可能でしょうか？

table1

id | name  
‐‐‐‐‐+‐‐‐‐‐‐‐  
I0001 | 12345  
I0002 | abcde  
I0003 | 67890  
I0004 | fghij  
I0005 | あああ

table2  
id | name | table1_id  
‐‐‐‐‐‐+‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐  
B0001 | aaaaaa | I0002 / I0004  
B0002 | bbbbbb | I0005  
B0003 | cccccc |  
B0004 | dddddd | I0001 / I0004 / I0005  
B0005 | eeeeee | I0004

求める結果  
table3  
id | name | cnt  
‐‐‐‐+‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐  
I0004 | fghij | 3  
I0005 | あああ | 2  
I0001 | 12345 | 1  
I0002 | abcde | 1  
I0003 | 67890 | 0


CC BY-SA 3.0
2015-08-03T09:09:50.407
12989
2015-08-03T09:38:37.563
9128
question
mysql sql
mysqlで登録数を求めるsql


`table1_id`のところは正規化されずに / 区切りにされているのでしょうか？  
`LIKE`で部分一致をしていますがその部分はカラム仕様に合わせてください。

[code]

    SELECT
        id,
        name,
        (SELECT COUNT(*) FROM table2 WHERE table1_id LIKE CONCAT(N'%', table1.id, N'%')) AS cnt
    FROM table1
    ORDER BY cnt DESC
    
[/code]


CC BY-SA 3.0
2015-08-03T09:38:34.283
12992
2015-08-03T09:38:34.283
4236
12989
answer


下記のような感じでどうでしょうか？

[code]

    select tbl1.id,tbl1.name,id_cnt.cnt 
    from `table1` as tbl1, (
        select count(*) as cnt 
        from `table1` as tbl1, `table2` as tbl2 
        where tbl2.table1_id LIKE '%'+tbl1.id+'%'
    ) as id_cnt;
    
[/code]

ID……というより情報が区切り文字で管理されているのは、  
データベースとして、ちょっと管理しづらいかと思いますので正規化を検討してみてはいかがでしょうか？


CC BY-SA 3.0
2015-08-03T09:38:37.563
12993
2015-08-03T09:38:37.563
7676
12989
answer