Вы не выделяете память для сегментов строки, которые пытаетесь сохранить в laenge_drei
. В конце цикла каждый индекс laenge_drei
содержит ссылку на zs
и, следовательно, последнюю обработанную строку.
if(laenge == 3)
{
laenge_drei[index_drei] = strdup(zs);
printf("%s", laenge_drei[index_drei]);
sleep(1000);
index_drei++;
}
Измените strcpy(zs2, laenge_drei[0])
на strcpy(zs2, laenge_drei[index_drei])
, если вы пытаетесь распечатать каждый сегмент, или вы просто будете печатать первый сегмент снова и снова.
Когда вы выходите из петли & amp; попробуйте снова напечатать laenge_drei[0]
, оно все равно будет иметь первое значение. Не забудьте освободить память.
Нет, Вам просто нужны круглые скобки:
DELETE FROM student WHERE
(student.course, student.major) IN
(SELECT schedule.course, schedule.major FROM schedule)
Вы могли также использовать, СУЩЕСТВУЕТ пункт:
DELETE FROM student WHERE
EXISTS
(
SELECT 1 FROM schedule
WHERE schedule.course=student.course
AND schedule.major=student.major
)
DELETE FROM student WHERE
(student.course, student.major) IN
(SELECT schedule.course, schedule.major FROM schedule)
Помещенный parens вокруг Ваших условий в, где пункт.Удачи!
В Oracle можно сделать удаление из встроенного представления, но ей обычно нужен внешний ключ, который гарантирует, что строка от таблицы, из которой удалена строка, не может быть представлена больше чем одной строкой в представлении.
create table parent (id number primary key);
create table child (id number primary key, parent_id number references parent);
insert into parent values(1);
insert into child values(2,1);
delete from (select * from parent p, child c where c.parent_id = p.id);
Синтаксис ниже работ в SQLServer <забастовка>, но я полагаю, что это - стандарт sql забастовка>, но, как указано в комментариях это - нестандартная реализация и в настоящее время не поддерживается в Oracle.
я оставлю его для ссылки
delete s
from
student s
inner join schedule sch
on s.course=sch.course
and s.major = sch.major