mysqlのの結果セットの変更IDの値が参加します

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 

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=24037&siteId=1