2014-01-25 37 views
0

我從網站上搜集了大量的數據,並製作了對我來說合理的表格結構。我想在MySQL中做的事情

現在,我試圖根據關係拉取數據集。 所以我有一張桌子滿了coin_a coin_b交易。

OPEN_TRADES: coin_id_a coin_id_b exchange_id action_type price amount time 

我想要做的是從ID_A和ID_b的硬幣表中加入數據。

COINS: id name short_name 

我開始了與此:

SELECT `op`.`coin_id_a`, `op`.`coin_id_b`, `op`.`exchange_id`, 
    `op`.`action_type`, `op`.`price`, `op`.`amount`, `op`.`time`, 
    `c`.`name` , `c`.`short_name` 
    FROM `open_trades` as `op` 
     LEFT JOIN `coins` as `c` 
      ON `op`.`coin_id_a`=`c`.`id` 

這個工程完全按照我預期。但它只能解決我想要的一半數據。 我想再次爲coin_id_b執行此連接。

我只是沒有正確的工具在我的腰帶下執行此操作。坦率地說,錯誤我:D

我知道我可以在PHP中做到這一點,事實上我正是這樣做。問題是它在php中效率不高。 我知道我的數據庫會更快地做到這一點。特別是因爲我的交易表在內存中運行。

結果的模式,我希望創建看起來像這樣:

coin_id_a coin_id_b exchange_id action_type price amount time id_a name_a 
short_name_a id_b name_b short_name_b 

什麼是加入從同一個表2分分別排在兩個不同領域的另一個表在MySQL的正確方法?

+0

你的意思是像'LEFT JOIN硬幣一樣c ON op.coin_id_a = c.id或op.coin_id_b = c.id'? – maja

+0

不,因爲我需要**硬幣數據** ** coin_id_a和coin_id_b。 – Nocare

+0

你的意思是[交叉連接](https://en.wikipedia.org/wiki/Join_(SQL)#Cross_join)? –

回答

0

什麼是正確的方式將2個單獨的行從同一個表中連接到mysql中另一個表中的兩個單獨的字段?

爲該表提供兩個不同的別名,併爲所選列提供唯一的別名。

考慮您的架構,它可能是這樣的:

SELECT 
     op.coin_id_a, op.coin_id_b, op.exchange_id, 
     op.action_type, op.price, op.amount, op.time, 
     coin_a.id AS id_a, coin_a.name AS name_a, coin_a.short_name AS short_name_a, 
     coin_b.id AS id_b, coin_b.name AS name_b, coin_b.short_name AS short_name_b 
FROM open_trades AS op 
LEFT JOIN coins AS coin_a 
ON op.coin_id_a = coin_a.id 
LEFT JOIN coins AS coin_b 
ON op.coin_id_b = coin_b.id 

在評論中說了一句話:

如果我給我我從兩個不同的別名加入表我可以使用它兩次。 百倍。

我意識到這是在開玩笑說,但這裏有一個事實瑣事儘管如此:在MySQL中,你不能有一百聯接在一個查詢中,有一個內置的limit of 61 table in a single query

+0

感謝您等待雅來發布答案。 這相當有趣。 61.我會記住的。 – Nocare

相關問題