JonZee:
私は2つのテーブル、書籍やgenre_orderを持っています。私はJOINを使用してgenre_order(T2)から順カラムを用いてジャンルごとにすべての書籍からの値(T1)と順番にそれらを選択しようとしています。結果セットの注文彼らはちょうど良い、しかし、私は新しい秩序を反映するためにbook_id変更する方法についての暗闇にいますよ。
table : books
+-------+------------------+-----------+
|book_id| name | genre |
+-------+------------------+-----------+
| 1 | Harry Potter | Fantasy |
| 2 | The Alchemist | Fantasy |
| 3 | Inferno | Thriller |
| 4 | Steve Jobs | Biography|
| 5 | John Adams | Biography|
+-------+------------------+-----------+
table : genre_order
+-----------+-------+
| genre | order |
+-----------+-------+
| Biography | 1 |
| Fantasy | 2 |
| Thriller | 3 |
+-----------+-------+
クエリ:
SELECT * FROM books t1 JOIN genre_order t2 ON t1.genre = t2.genre ORDER BY t2.order ASC
結果:
+-------+------------------+-----------+-----------+------+
|book_id| name | genre | genre | order|
+-------+------------------+-----------+-----------+------+
| 4 | Steve Jobs | Biography| Biography| 1 |
| 5 | John Adams | Biography| Biography| 1 |
| 1 | Harry Potter | Fantasy | Fantasy | 2 |
| 2 | The Alchemist | Fantasy | Fantasy | 2 |
| 3 | Inferno | Thriller | Thriller | 3 |
+-------+------------------+-----------+-----------+------+
期待される結果:
+-------+------------------+-----------+------+
|book_id| name | genre | order|
+-------+------------------+-----------+------+
| 1 | Steve Jobs | Biography| 1 |
| 2 | John Adams | Biography| 1 |
| 3 | Harry Potter | Fantasy | 2 |
| 4 | The Alchemist | Fantasy | 2 |
| 5 | Inferno | Thriller | 3 |
+-------+------------------+-----------+------+
それが結果セットにbook_idを変更することは可能です?。また、どのように私は冗長列を避けていますか?
Tushar:
このコードを試してみてください
SELECT ROW_NUMBER() over (order by pk_field ) as book_id,t1.name,t2.genre,t2.order FROM books t1 JOIN genre_order t2 ON t1.genre = t2.genre ORDER BY t2.order ASC
あるいは、このコード
select @ab:=@ab+1 as book_id,a.* from (SELECT t1.name,t2.genre,t2.order FROM books t1 JOIN genre_order t2 ON t1.genre = t2.genre ORDER BY t2.order DESC) a, (SELECT @ab:= 0) AS ab