首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查“此处不允许”中的子查询

检查“此处不允许”中的子查询
EN

Stack Overflow用户
提问于 2013-02-24 10:38:50
回答 1查看 1.7K关注 0票数 0

我正尝试在我的一个表上添加一个约束,以确保我的工人维护一个工作站时,且仅当该工作站处于工人当前受雇的状态时。但是,Oracle似乎不喜欢约束中的子查询。

我记得我以前上过的一门课,当我这样做的时候,sqlplus不喜欢跨表检查:

代码语言:javascript
复制
ALTER TABLE STATION ADD CONSTRAINT Check_Worker CHECK (Maintainer IN (
    SELECT *
        FROM 
            STATION s,
            FOREST f,
            COVERAGE c,
            STATE st,
            WORKER w
        WHERE
            s.x BETWEEN f.MBR_XMin AND f.MBR_XMax AND 
            s.y BETWEEN f.MBR_YMin AND f.MBR_YMax AND 
            f.Forest_Id = c.Forest_Id AND
            st.State = w.employing_state
        )
    );

它冲我大喊:

代码语言:javascript
复制
'Question 3'
    SELECT *
    *
ERROR at line 2:
ORA-02251: subquery not allowed here. 

那么,我有没有什么办法可以轻松解决这个问题呢?可能有多个约束?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-24 21:45:19

解决这个问题的一种方法是使用数据模型。使用交叉表连接工人和桩号。

诀窍是创建唯一的组合键,它将状态添加到WORKER和STATION的实际主键中。

所以,就像这样:

代码语言:javascript
复制
alter table WORKER add constraint wrk_state_uk unique (worker_id, employing_state) ;

alter table STATION add constraint stn_state_uk unique (station_id, state) ;

然后我们创建一个具有许多约束的交叉表:)。(显然,我正在猜测这里的数据类型,以及列名。)

代码语言:javascript
复制
create table station_maintainer (
    station_id number not null
    , station_state number not null
    , worker_id number not null
    , employing_state number not null
    , constraint stn_mnt_pk primary key (station_id, worker_id)
    , constraint stn_mnt_uk unique (station_id )
    , constraint stn_mnt_stn_fk foreign key (station_id)
          references station (station_id)
    , constraint stn_mnt_wrk_fk foreign key (worker_id)
          references worker (worker_id)
    , constraint stn_mnt_state_ck check (station_state = employing_state)

唯一的密钥确保每个工作站只有一个维护者。我猜想一部作品可以维持不止一个工作站,

我们需要两个表上的唯一键,以便外键可以引用状态以及实际的主键。这是一个回避,但它确实确保交叉表上的STATE列与父表上的STATE列相匹配。

您张贴的支票中的实际表格是混乱的。没有连接WORKER和状态到工作站的任何东西,soI已经猜测了表可能是如何相关的。如果我的猜测与您的实际模型不符,请不要抱怨:相反,请修改您的问题以提供准确和足够的详细信息。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15048108

复制
相关文章

相似问题

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