连接表,必须在同一查询中获取表名

时间:2014-06-26 20:01:42

标签: php mysql

这个问题不是要讨论数据库的设置是否应该如此,我对它的实际情况不满意,但它是如何实现的,并且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表中获取所有数据并在该查询中直接在payment_provider表上执行join,我们现在只能从transaction获取该表。 {1}}表。

我也用PHP标记了它,因为我想用PDO拨打电话。整个PHP片段不是必需的,但如果你坚持;)。为自己的查询推进正确的方向就足够了。我知道我缺乏我尝试过的例子。但说实话,我没有尝试那么多,因为我无法真正想到某些东西,这是我第一次遇到这种查询的需要。

1 个答案:

答案 0 :(得分: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表必须具有相同的列数和类型。否则,您只需要选择实际上常见的字段(如果需要,可以采用这种方法)。