2014-03-02 114 views
0

我有兩個表。表1存儲代碼的位置順序。表2存儲每個代碼的信息。我試圖做一個查詢完成一個ID,返回每個代碼及其相關信息的順序。SQL按照順序連接兩個表

TABLE1 
+-------+-----------+----------+-----------+-----------+-----------+ 
| id | position1 | positon2 | position3 | position4 | position5 | 
+-------+-----------+----------+-----------+-----------+-----------+ 
| id1 | AA  | CC  | BB  | EE  | DD  | 
|-------|-----------|----------|-----------|-----------|-----------| 
| id2 | BB  | AA  | DD  | EE  | CC  | 
+-------+-----------+----------+-----------+-----------+-----------+ 

TABLE2 
+------+------------+--------------------+ 
| code | name  | active_icon  | 
+------+------------+--------------------+ 
| AA | nameA  | iconA    | 
| BB | nameB  | iconB    | 
| CC | nameC  | iconC    | 
| DD | nameD  | iconD    | 
| EE | nameE  | iconE    | 
+------+------------+--------------------+ 

做了一個ID(例如ID = ID2),我期待的結果是:

+----------------+------+------------+--------------------+ 
| position  | code | name  | active_icon  | 
+----------------+------+------------+--------------------+ 
|    1 | BB | nameB  | iconB    | 
|    2 | AA | nameA  | iconA    | 
|    3 | DD | nameD  | iconD    | 
|    4 | EE | nameE  | iconE    | 
|    5 | CC | nameC  | iconC    | 
+----------------+------+------------+--------------------+ 

任何想法?我認爲必須有一個INNER JOIN,但我不知道如何去解決它。

+2

如果將表1歸一化,會更好。 – Barmar

+0

與表1幾乎不可能 – nidomiro

回答

0

這是一個非規格化設計。如果你能夠正確地建模,它會更容易。它也會更具可擴展性。

我會給表1一個位置的列和外部代碼的表2的列。你可以擁有儘可能多的代碼。重新排序意味着改變位置值。 JOIN寫入自己然後:只需添加一個ORDER BY位置。

0
SELECT position, t1.code, name, active_icon 
FROM (SELECT 1 AS position, id, position1 AS code 
     FROM Table1 
     UNION 
     SELECT 2 AS position, id, position2 AS code 
     FROM Table1 
     UNION 
     SELECT 3 AS position, id, position3 AS code 
     FROM Table1 
     UNION 
     SELECT 4 AS position, id, position4 AS code 
     FROM Table1 
     UNION 
     SELECT 5 AS position, id, position5 AS code 
     FROM Table1) AS t1 
JOIN Table2 AS t2 
ON t1.code = t2.code 
WHERE t1.id = :ID 
ORDER BY position 
+0

雖然我確定它的工作原理,但我希望我們不會認真提倡這是一個解決方案。 :-( – Strawberry

+0

我寫了一條評論,建議他正常化他的數據庫,但這不是答案,所以我沒有把它放在這裏。 – Barmar

0

您可以嘗試使用PIVOT操作。但是在MySQL數據透視中沒有任何限制,但你可以手動模擬它。例子見MySQL pivot table