Ошибка «ORA-00913: слишком много значений» при выполнении запроса SQL - PullRequest
4 голосов
/ 02 декабря 2011

Я получаю ошибку "слишком много значений", и я не знаю, как к ней подойти.Проблема начинается с первого вложенного 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))

Я посмотрел Информация об этой ошибке , и я считаю, что это потому, что подзапрос в WHERE возвращает слишком много столбцов.Данные таблицы ниже.Но как я могу уменьшить это?Я ценю любые советы, спасибо

обязательные навыки

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 ]

6 голосов
/ 02 декабря 2011

Быстрое переписывание:

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 голос
/ 02 декабря 2011

использование "существует" в месте "в" может помочь вам

0 голосов
/ 08 января 2017
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);

при вставке значений это дает ошибку для многих значений

У меня есть скрипт этой таблицы, когда я вставляю его, он выдает много ошибок, в то время как на моем рабочем столе он работает нормально

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...