SQL заявление не работает, получая ошибки

0

У меня возникли проблемы с получением заявления для запуска, я ищу общие кредиты каждого студента и идентификатор студента.

Я написал:

select student.ID,sum (course.credits)
from (student natural join takes),course 
where takes.course_id=course.course_id
group by student.ID

когда я запускаю это, я получаю следующую ошибку: столбец, используемый в NATURAL join, не может иметь квалификатор

мои таблицы

create table student
(ID             varchar(5),
 name           varchar(20) not null,
 dept_name      varchar(20), 
 tot_cred       numeric(3,0) check (tot_cred >= 0),
 primary key (ID),
 foreign key (dept_name) references department
    on delete set null

create table takes
(ID              varchar(5), 
 course_id           varchar(8),
 sec_id              varchar(8), 
 semester            varchar(6),
 year                numeric(4,0),
 grade                   varchar(2),
 primary key (ID, course_id, sec_id, semester, year),
 foreign key (course_id,sec_id, semester, year) references section
    on delete cascade,
 foreign key (ID) references student
    on delete cascade

Я не уверен, в чем проблема. когда я запускаю это выражение, он работает

select name, sum(course.credits)
from (student natural join takes),course 
where ID=1000 and takes.course_id=course.course_id
group by name

если вы можете указать мне в правильном направлении, я был бы признателен.. спасибо

  • 0
    Почему бы не использовать более обычную форму соединений с предложением ON?
  • 0
    Отметьте правильно !!! Oracle <> MySQL !!!
Показать ещё 2 комментария
Теги:

2 ответа

1

NATURAL JOIN не рекомендуется и может привести к незначительным непредвиденным ошибкам, особенно когда таблицы будут изменены позже. Вместо этого используйте INNER JOIN:

select name, sum(c.credits)
  from student s
  inner join takes t
    ON t.ID = s.ID
  inner join course c
    ON c.COURSE_ID = t.COURSE_ID
  where s.ID = 1000
  group by name

Удачи.

  • 0
    Внутреннее соединение работает отлично, спасибо, теперь, если я смогу просто выполнить другое заявление, я буду в отличной форме. Я попытался изменить его, как предложено, и все равно не будет работать
  • 0
    Что значит «все равно не будет работать»? Вы не получаете ожидаемых результатов? Если да, как выглядят ваши тестовые данные, каких результатов вы ожидали и что получили? Вы получили ошибку? Если да, то каков точный текст ошибки? Пожалуйста, отредактируйте свой вопрос и включите вышеуказанную информацию. И пока вы там, пожалуйста, включите определение таблицы course . Благодарю.
0

Предложение from просто неверно в отношении того, как вы используете свои скобки. Просто используйте явное предложение join для всех ваших объединений, и вы должны быть в порядке:

SELECT       student.ID, SUM(course.credits)
FROM         student
NATURAL JOIN takes
NATURAL JOIN course 
GROUP BY     student.ID
  • 0
    эй спасибо за совет. Я внес изменения, которые вы предложили, и я получаю ту же ошибку: "столбец, используемый в NATURAL объединении, не может иметь спецификатор"

Ещё вопросы

Сообщество Overcoder
Наверх
Меню