SQL - 有关列值的不同连接

时间:2015-02-02 06:36:23

标签: sql oracle join oracle11g

我有架构,其中为灵活的实现创建表。让我们说我有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
}

1 个答案:

答案 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

但是你没有指定你想要的输出,所以我不知道这对你来说是否有问题。

但我同意贾斯汀的评论:这听起来不是一个好主意。