运行SQL查询时出现“ORA-00913:值太多”错误

时间:2011-12-02 07:40:42

标签: sql oracle oracle11g ora-00913

我收到了“太多的值”错误,我不确定如何处理它。问题从第一个嵌套的SELECT

开始
SELECT p.name, p.phone_number 
    FROM person p WHERE 
    (SELECT ks.title, ks.ks_code 
    FROM required_skills rs JOIN knowledge_skills ks USING (ks_code) 
    WHERE rs.pos_code = 'CS1') 
    IN (SELECT ks.title, ks.ks_code 
        FROM courses_taken ct  JOIN course_learning_units clu 
        USING (c_code)  JOIN learning_unit_skills lus USING (lu_code) 
        JOIN knowledge_skills ks USING (ks_code))

我查了info about this error,我相信这是因为WHERE中的子查询返回了太多列。表格数据如下。但是我该如何减少呢?我感谢任何指示,谢谢

required_skills

POS_CODE    VARCHAR2(10 BYTE)   Yes     1   
KS_CODE VARCHAR2(10 BYTE)   Yes     2   

learning_unit_skills

LU_CODE VARCHAR2(10 BYTE)   Yes     1   
KS_CODE VARCHAR2(10 BYTE)   Yes     2

PER_ID  NUMBER(38,0)    No      1   
NAME    VARCHAR2(255 BYTE)  Yes     2   
STREET  VARCHAR2(255 BYTE)  Yes     3   
CITY    VARCHAR2(60 BYTE)   Yes     4   
ZIP_CODE    VARCHAR2(60 BYTE)   Yes     5   
PHONE_NUMBER    VARCHAR2(255 BYTE)  Yes     6   
GENDER  VARCHAR2(6 BYTE)    Yes     7   

课程学习单元

C_CODE  VARCHAR2(10 BYTE)   Yes     1   
LU_CODE VARCHAR2(10 BYTE)   Yes     

课程

C_CODE  VARCHAR2(10 BYTE)   Yes     1   
PER_ID  NUMBER(38,0)    Yes     2   

3 个答案:

答案 0 :(得分:6)

快速重写:

SELECT p.name, p.phone_number 
    FROM person p WHERE EXISTS
    (SELECT * 
    FROM required_skills rs JOIN knowledge_skills ks USING (ks_code) 
    WHERE rs.pos_code = 'CS1'
      AND (ks.title, ks.ks_code)
    IN (SELECT ks.title, ks.ks_code 
        FROM courses_taken ct  JOIN course_learning_units clu 
        USING (c_code)  JOIN learning_unit_skills lus USING (lu_code) 
        JOIN knowledge_skills ks USING (ks_code))
    )

或(联接可能需要更正):

SELECT p.name, p.phone_number 
    FROM person p WHERE EXISTS
    (SELECT * 
     FROM required_skills rs JOIN knowledge_skills ks USING (ks_code) 
        JOIN ( courses_taken ct  JOIN course_learning_units clu 
               USING (c_code)  JOIN learning_unit_skills lus USING (lu_code) 
              ) USING (ks_code)
     WHERE rs.pos_code = 'CS1'
    )

问题在于您的代码与表person无关。我猜你应该在子查询中有一个 - 使它们相关。

答案 1 :(得分:1)

使用"存在"在"在"的地方可以帮到你

答案 2 :(得分:0)

CREATE TABLE EMP(EMPNO NUMBER(4) NOT NULL,
        ENAME VARCHAR2(10),
        JOB VARCHAR2(9),
        MGR NUMBER(4),
        HIREDATE DATE,
        SAL NUMBER(7, 2),
        COMM NUMBER(7, 2),
        DEPTNO NUMBER(2));


INSERT INTO EMP VALUES
        (7369, 'SMITH',  'CLERK',     7902,
        TO_DATE('17-DEC-1980', 'DD-MON-YYYY'),  800, NULL, 20);

插入值时,它会给许多值带来错误

当我插入它时,我有一个这个表的表脚本,它在我的桌面上提供了很多错误它可以正常工作