首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带区分符的外键

带区分符的外键
EN

Stack Overflow用户
提问于 2019-03-16 01:34:30
回答 1查看 40关注 0票数 0

我有一个表状态,其中包含多个表的状态:

代码语言:javascript
复制
TABLE_NAME | STATUS_ID | STATUS_NAME
===========+===========+============
TAB_1      |         1 | New
TAB_1      |         2 | Started
TAB_1      |         3 | Complete
TAB_2      |         1 | Empty
TAB_2      |         2 | Full

表STATUSES有两列主键(table_name、status_id)。

然后我有表TAB_1:

代码语言:javascript
复制
ID | STATUS_ID | TAB_VALUE
===+===========+==========
 1 |         1 | Value1

当我想要检索带有状态的表值时,我使用以下SQL查询:

代码语言:javascript
复制
SELECT id,tab_value,status_name
FROM tab_1 t
JOIN statuses s ON (s.status_id=t.status_id AND s.table_name='TAB_1')

现在我想创建一个从TAB_1到STATUSES的外键,但是应该用表名来区分STATUS_ID!

我试过这样的东西:

代码语言:javascript
复制
ALTER TABLE tab_1
ADD CONSTRAINT tab_1_status_fk FOREIGN KEY ('TAB_1',status_id)
REFERENCES statuses (table_name,status_id)
ENABLE;

当然,这不起作用(否则我就不会在这里了)。

有没有可能用'distinguisher‘来创建这样一个外键?

EN

回答 1

Stack Overflow用户

发布于 2019-03-16 03:44:04

我想我应该将表名添加为具有常量值的虚拟列,例如

代码语言:javascript
复制
alter table tab_1 add (table_name as ('TAB_1'));

然后使用它创建fk

代码语言:javascript
复制
ALTER TABLE tab_1
ADD CONSTRAINT tab_1_status_fk FOREIGN KEY (table_name,status_id)
REFERENCES statuses (table_name,status_id)
ENABLE;

编辑:如果你在12c或更高版本上,你可以隐藏虚拟列;我认为它仍然适用于FK…

代码语言:javascript
复制
alter table tab_1 add (table_name invisible as ('TAB_1'));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55188011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档