2014-06-26 68 views
0

這個問題不是討論數據庫的設置是否應該如此,我不滿意它是如何,但它是這是怎麼回事,DBA現在不會做重構。加入表格,必須在同一個查詢中獲取表格名稱

我在尋找的是一種加入表格的方法,爲此我不提前知道表格名稱,但它在表格中,我想要進行連接。

所以:

 

TABEL transactions 
trans_id autherizer 
001Bar payment_provider_a 
001Foo payment_provider_b 
 

TABLE payment_provider_a 
trans_id amount 
001Bar 50 
 

TABLE payment_provider_b 
trans_id amount 
001Foo 50 
 

表名是虛構的,但設置是一樣的。有一個transaction表,其中存儲transaction_idpayment_provider字符串名稱(具有很多附加數據,這與問題無關)。

會不會有反正來從transaction表,並在查詢中的所有數據直接在join做的payment_provider表中,我們現在才什麼表可以從transaction表。

我也用PHP標記了它,因爲我想用PDO撥打電話。整個PHP片段不是必需的,但如果你堅持;)。自己查詢的正確方向的推動就足夠了。我知道我缺乏我嘗試過的例子。但說實話,我還沒有嘗試過那麼多,因爲我不能真正想到什麼,這是我第一次需要這樣的查詢。

回答

2

不是過於乾淨,但你可以試試這個:

SELECT * FROM transactions t JOIN 
    (
     SELECT 'payment_provider_a' AS name,* FROM payment_provider_a 
    UNION 
     SELECT 'payment_provider_b' AS name,* FROM payment_provider_b 
    ) p ON t.payment_provider = p.name AND t.trans_id=p.trans_id 

注意,所有payment_provider_x表必須具有列的相同數量和類型。否則,你只需要選擇實際上通用的字段(如果需要,可以採用這種方式)。

+0

+1。 。 。但你應該把'union'換成'union all'。 –

+0

@GordonLinoff,它不會改變結果(因爲名字是不同的),但它應該確實有助於提高性能。 – jcaron

+0

我已經接受它作爲答案,但這不適用於我,每當有新的支付提供商介紹時,我將不得不更改/更新查詢..我只會做兩個查詢,第二個將是決賽。謝謝。 –