我有架构,其中为灵活的实现创建表。让我们说我有3张桌子:
1. Customer
- CUSTOMER_ID
- NAME
2. Account
- ACCOUNT_ID
- ACCOUNT_TYPE
- IBAN
3. Dummy_table
- Dummy_table_id
- FK_CUSTOMER_ID
- FK_ACCOUNT_ID
- TABLE_NAME
我想在JOIN子句中实现模式逻辑。实现这个目标的最佳方式是什么:
if (TABLE_NAME == "CUSTOMER") then {
JOIN WITH CUSTOMER TABLE USING FK_CUSTOMER_ID
} else {
JOIN WITH ACCOUNT TABLE USING FK_ACCOUNT_ID
}
答案 0 :(得分:1)
您可以使用外连接以某种方式执行此操作:
select dt.dummy_table_id,
dt.table_name,
c.customer_id,
c.name,
a.account_id,
a.account_type,
a.iban
from dummy_table dt
left join customer c
on c.customer_id = dt.fk_customer_id
and dt.table_name = 'CUSTOMER'
left join account a
on a.account_id = dt.fk_account_id
and dt.table_name = 'ACCOUNT'
这将为那些不匹配的列提供NULL
值。但是,对于那些"虚拟行"它将为dummy_table
提供两个结果行。其中包含customer_id
和 account_id
。
但是你没有指定你想要的输出,所以我不知道这对你来说是否有问题。
但我同意贾斯汀的评论:这听起来不是一个好主意。