加入表格,必须在同一个查询中获取表格名称
问题描述:
这个问题不是讨论数据库的设置是否应该如此,我不满意它是如何,但它是这是怎么回事,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_id
和payment_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
表必须具有列的相同数量和类型。否则,你只需要选择实际上通用的字段(如果需要,可以采用这种方式)。
+1。 。 。但你应该把'union'换成'union all'。 –
@GordonLinoff,它不会改变结果(因为名字是不同的),但它应该确实有助于提高性能。 – jcaron
我已经接受它作为答案,但这不适用于我,每当有新的支付提供商介绍时,我将不得不更改/更新查询..我只会做两个查询,第二个将是决赛。谢谢。 –