Oracle удаляет строки, соответствующие на нескольких значениях

Вы не выделяете память для сегментов строки, которые пытаетесь сохранить в 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], оно все равно будет иметь первое значение. Не забудьте освободить память.

26
задан Brian Tompsett - 汤莱恩 2 July 2015 в 17:06
поделиться

5 ответов

Нет, Вам просто нужны круглые скобки:

DELETE FROM student WHERE
(student.course, student.major) IN
(SELECT schedule.course, schedule.major FROM schedule)
44
ответ дан Tony Andrews 28 November 2019 в 06:24
поделиться

Вы могли также использовать, СУЩЕСТВУЕТ пункт:

DELETE FROM student WHERE
EXISTS
(
  SELECT 1 FROM schedule 
  WHERE schedule.course=student.course 
  AND schedule.major=student.major
)
14
ответ дан Ram Sharma 28 November 2019 в 06:24
поделиться
DELETE FROM student WHERE
(student.course, student.major) IN
(SELECT schedule.course, schedule.major FROM schedule)

Помещенный parens вокруг Ваших условий в, где пункт.Удачи!

7
ответ дан Ram Sharma 28 November 2019 в 06:24
поделиться

В 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);
3
ответ дан Gary Myers 28 November 2019 в 06:24
поделиться

Синтаксис ниже работ в SQLServer <забастовка>, но я полагаю, что это - стандарт sql , но, как указано в комментариях это - нестандартная реализация и в настоящее время не поддерживается в Oracle.

я оставлю его для ссылки

delete s
from 
    student s 
    inner join schedule sch
    on s.course=sch.course 
    and s.major = sch.major
2
ответ дан kristof 28 November 2019 в 06:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: