加入表格,必须在同一个查询中获取表格名称

加入表格,必须在同一个查询中获取表格名称

问题描述:

这个问题不是讨论数据库的设置是否应该如此,我不满意它是如何,但它是这是怎么回事,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片段不是必需的,但如果你坚持;)。自己查询的正确方向的推动就足够了。我知道我缺乏我尝试过的例子。但说实话,我还没有尝试过那么多,因为我不能真正想到什么,这是我第一次需要这样的查询。

不是过于干净,但你可以试试这个:

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

我已经接受它作为答案,但这不适用于我,每当有新的支付提供商介绍时,我将不得不更改/更新查询..我只会做两个查询,第二个将是决赛。谢谢。 –