Как я могу заставить этот запрос работать? - PullRequest
0 голосов
/ 27 апреля 2018

Запрос просит найти наборы курсов, в которых их комбинация охватывает все недостающие знания / навыки, необходимые человеку для использования pos_code. Рассматриваемые наборы курсов не будут включать более трех курсов. Если найдено несколько наборов курсов, перечислите наборы курсов (с их идентификаторами курсов) в порядке возрастания общая стоимость курсов.

Запрос, который я пытаюсь написать, приведен ниже, но выдает ошибку в SQL Developer. Ошибка SQL: ORA-01747: неверная спецификация user.table.column, table.column или столбца. В чем причина этого?

SELECT c.c_code, c.title, c.level, c.description, k.ks_code, SUM(c.retail_price)
FROM course c 
INNER JOIN knowledge k 
ON c.c_code = k.c_code 
INNER JOIN requires r 
ON r.ks_code = k.ks_code
WHERE pos_code = 1
GROUP BY c.c_code, c.title, c.level, c.description, k.ks_code
ORDER BY c.retail_price;

Используются таблицы

CREATE TABLE course(
    c_code VARCHAR(8),
    title VARCHAR(80),
    c_level VARCHAR(20) CHECK(c_level = 'beginner' OR c_level = 'intermediate' OR c_level = 'advanced'),
    description VARCHAR(300),
    status VARCHAR(6) CHECK(status = 'expired' OR status = 'active'),
    retail_price NUMERIC(8,2) CHECK (retail_price > 0),
    PRIMARY KEY(c_code)
);

CREATE TABLE knowledge(
    ks_code VARCHAR(8),
    ks_title VARCHAR(50) NOT NULL,
    ks_description VARCHAR(300),
    ks_level VARCHAR(15) CHECK(ks_level = 'beginner' OR ks_level = 'intermediate' OR ks_level = 'advanced'),
    PRIMARY KEY(ks_code)
);

CREATE TABLE requires(
    pos_code VARCHAR(8),
    ks_code VARCHAR(8),
    PRIMARY KEY(pos_code, ks_code),
    FOREIGN KEY(pos_code) REFERENCES position ON DELETE CASCADE,
    FOREIGN KEY(ks_code) REFERENCES knowledge ON DELETE CASCADE
);

CREATE TABLE teaches(
    c_code VARCHAR(8),
    ks_code VARCHAR(8),
    PRIMARY KEY(c_code, ks_code),
    FOREIGN KEY(c_code) REFERENCES course ON DELETE CASCADE,
    FOREIGN KEY(ks_code) REFERENCES knowledge ON DELETE CASCADE
);

CREATE TABLE position(
    pos_code VARCHAR(8),
    emp_mode VARCHAR(15) CHECK(emp_mode = 'full-time' OR emp_mode = 'part-time'),
    required_skill VARCHAR(30) NOT NULL,
    pay_rate NUMERIC(8,2) CHECK(pay_rate > 0),
    pay_type VARCHAR(8) CHECK(pay_type = 'wage' OR pay_type = 'salary'),
    cate_code VARCHAR(8),
    comp_id VARCHAR(8),
    PRIMARY KEY(pos_code)
);

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Запрос даже не был правильно оформлен, в ссылках на столбцы было много ошибок, которые были пропущены.

Исправлен запрос, который ранее содержал неправильные ссылки на столбцы!

SELECT c.c_code, c.title, c.c_level, c.description, k.ks_code, SUM(c.retail_price)
FROM course c 
INNER JOIN knowledge k 
ON c.c_code = k.ks_code 
INNER JOIN requires r 
ON r.ks_code = k.ks_code
WHERE r.pos_code = 1
GROUP BY c.c_code, c.title, c.c_level, c.description, k.ks_code, c.retail_price
ORDER BY c.retail_price;

Вам все еще нужно проверить следующие пункты:

  • Вам необходимо проверить, к какому pos_code вы хотите обратиться. Это из requires или position?
  • Запустите этот запрос данных, я только что проверил, чтобы запрос выполнялся!
0 голосов
/ 27 апреля 2018

В курсе таблицы нет уровня столбца, а в знаниях таблицы нет столбца c_code

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