如何将表名作为列值存储在另一个表中的表加入?

时间:2018-03-14 11:34:07

标签: sql sql-server inner-join

要在我的系统中允许多个支付网关,我有一个已定义支付网关(ID,名称,代码)的表格,其中code是包含特定支付网关交易响应的表名(例如'paypal')

在我的sql server查询中,我想根据此列的值加入每个网关的事务表。

这可能吗?如果是这样,怎么样?

在我的查询中,到目前为止,我根据所选付款网关的ID为特定卖家加入了付款网关表(其中[s]是卖家表):

INNER JOIN [payment_gateway] AS [pg] ON [s].[payment_gateway_id] = [pg].[id]

我想做的是:

INNER JOIN {{[pg].[code]}} AS [payment_table] ON [payment_table].[order_id] = [order].[id]

2 个答案:

答案 0 :(得分:1)

您可以使用left joincoalesce()

执行您想要的操作
SELECT . . .,
       COALESCE(pg1.col pg2.col, . . .) as col
FROM seller s LEFT JOIN
     payment_gateway pg1 
     ON s.payment_gateway_id = pg1.id AND s.code = '1' LEFT JOIN
     payment_gateway pg2 
     ON s.payment_gateway_id = pg2.id AND s.code = '2' LEFT JOIN
     . . . 

LEFT JOIN可能是在单个查询中处理此数据的最有效方式。更好的数据结构将所有支付网关信息放在一个表中。

答案 1 :(得分:0)

由于连接取决于列值,我决定在桌面上执行LEFT OUTER JOIN

LEFT OUTER JOIN [paypal] as [pp] on [pp].[quote_id] = [q].[id] and [pg].[code] = 'paypal'

这意味着我需要为我整合的每个新支付网关添加此行,但我很满意。