要在我的系统中允许多个支付网关,我有一个已定义支付网关(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]
答案 0 :(得分:1)
您可以使用left join
和coalesce()
:
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'
这意味着我需要为我整合的每个新支付网关添加此行,但我很满意。