我得到了這兩張表,其中一張表有多個指向第二張表的外鍵。
桌子 rankings
---------------- -------------- ------ ----- --------- ----------------
| Field | Type | Null | Key | Default | Extra |
---------------- -------------- ------ ----- --------- ----------------
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| search_text | varchar(255) | YES | MUL | NULL | |
| first_item_id | bigint(20) | YES | MUL | NULL | |
| second_item_id | bigint(20) | YES | MUL | NULL | |
| third_item_id | bigint(20) | YES | MUL | NULL | |
| forth_item_id | bigint(20) | YES | MUL | NULL | |
---------------- -------------- ------ ----- --------- ----------------
桌子 item
--------------------------- -------------- ------ ----- --------- ----------------
| Field | Type | Null | Key | Default | Extra |
--------------------------- -------------- ------ ----- --------- ----------------
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| item_code | varchar(255) | YES | MUL | NULL | |
---------------- -------------- ------ ----- --------- ---------------------------
一個ranking記錄可能有多個關聯item使用表first_item_id,second_item_id,third_item_id或forth_item_id領域。我想ranking用相應的item_code而不是item.id. 如果我有大量資料,最有效的方法是什么?
PS:item.idas first_item_id...有10個關聯tenth_item_id。我正在使用 Rails ActiveRecordORM。任何解決方法也很好。
樣本資料 ranking
SELECT id,search_text,first_item_id as first,second_item_id as second,third_item_id as third,forth_item_id as forth from rankings limit 10;
---- ------------- ------- -------- ------- -------
| id | search_text | first | second | third | forth |
---- ------------- ------- -------- ------- -------
| 1 | test 1 | 1 | 2 | 3 | 4 |
| 2 | test 2 | 1 | 2 | 3 | 4 |
| 3 | test 3 | 1 | 2 | 3 | 4 |
| 4 | test 4 | 1 | 2 | 3 | 4 |
---- ------------- ------- -------- ------- -------
樣本item資料
SELECT id,item_code from items limit 5;
-------- ------------
| id | item_code |
-------- ------------
| 1 | 125659 |
| 2 | 125660 |
| 3 | 125661 |
| 4 | 125662 |
-------- ------------
預期資料
---- ------------- ------- -------- ------- -------
| id | search_text | first | second | third | forth |
---- ------------- ------- -------- ------- -------
| 1 | test 1 | 125659| 125660 | 125661| 125662|
| 2 | test 2 | 125659| 125660 | 125661| 125662|
| 3 | test 3 | 125659| 125660 | 125661| 125662|
| 4 | test 4 | 125659| 125660 | 125661| 125662|
---- ------------- ------- -------- ------- -------
uj5u.com熱心網友回復:
多次加入表(甚至是很多次)應該沒有問題,因為你加入了主鍵,即你有一個將被使用的索引。
select
r.id,
r.search_text,
i1.item_code as item_code_1,
i2.item_code as item_code_2,
i3.item_code as item_code_3,
i4.item_code as item_code_4
from rankings r
left join item i1 on i1.id = r.first_item_id
left join item i2 on i2.id = r.second_item_id
left join item i3 on i3.id = r.third_item_id
left join item i4 on i4.id = r.forth_item_id
order by r.id;
我在這里使用外連接,因為您所有的專案列都可以為空。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/315237.html
下一篇:Flink臨時連接只作業幾秒鐘
