1

本のデータベースに2つのテーブルがあり、1つはジャンルがあります

--------------------
| id | genre       |
--------------------
| 1  |   genre 1   |
| 2  |   genre 2   |
| 3  |   genre 3   |
| 4  |   genre 2   |
--------------------

各書籍のカテゴリに 4 つの列があるテーブル ブック

---------------------------------
| id | name | c1 | c2 | c3 | c4 |
---------------------------------
|7427| book1| 3  | 1  | 0  | 0  |

本のすべてのカテゴリを ID で取得するにはどうすればよいですか?

私はこのような人を2つのジャンルで試してみましたが、2番目のカテゴリの結果は拳のように同じです

SELECT 
    books.id as bid,
    c1, 
    genre.name as g1_name,
    c2,
    genre.name as g2_name
FROM books 
    Left join genre on books.c1 = genre.id 
where books.id="7427"
;
4

2 に答える 2

1

1 つのアプローチ:

select b.id,
       b.name,
       b.c1,
       g1.genre genre1,
       b.c2,
       g2.genre genre2,
       b.c3,
       g3.genre genre3,
       b.c4,
       g4.genre genre4
from books b
left join genre g1 on b.c1 = g1.id 
left join genre g2 on b.c2 = g2.id 
left join genre g3 on b.c3 = g3.id 
left join genre g4 on b.c4 = g4.id 
where b.id='7427'

ここでSQLFiddle 。

または:

select b.id,
       b.name,
       b.c1,
       max(case g.id when c1 then g.genre end) genre1,
       b.c2,
       max(case g.id when c2 then g.genre end) genre2,
       b.c3,
       max(case g.id when c3 then g.genre end) genre3,
       b.c4,
       max(case g.id when c4 then g.genre end) genre4
from books b
left join genre g on g.id in (b.c1, b.c2, b.c3, b.c4)
where b.id='7427'
group by b.id

ここでSQLFiddle 。

于 2013-07-27T10:14:37.283 に答える