SQL delete, nie można usunąć wielu wierszy

0

Cześć,
wykonuję
delete from ABC where NUMER='' and DRUGI_NR='123'
i otrzymuję

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <=, >, >= or when the subquery is used as an expression

Wykonanie select się powodzi i pokazuje kilkanaście wyników, jednak analogiczny delete już się nie powodzi. Szukałem informacji o tym błędzie, ale nie znalazłem niczego pomocnego.
Jak mogę skasować więcej wierszy?
Pozdrawiam!

0

Takiej składni się trzymaj:
delete from xyz where abc in (select def from ghi);

poza tym google: "sql delete multiple row"

0
johnyjj2 napisał(a):

Cześć,
wykonuję
delete from ABC where NUMER='' and DRUGI_NR='123'
i otrzymuję

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <=, >, >= or when the subquery is used as an expression

Na pewno polecenie, które wykonujesz wygląda inaczej - błąd wyraźnie mówi o podzapytaniu, którego w tym co wkleiłeś nie ma. Albo dasz zapytanie, jakie próbujesz wykonać albo szukaj sobie szklanej kuli

0
abrakadaber napisał(a):

Na pewno polecenie, które wykonujesz wygląda inaczej - błąd wyraźnie mówi o podzapytaniu, którego w tym co wkleiłeś nie ma. Albo dasz zapytanie, jakie próbujesz wykonać albo szukaj sobie szklanej kuli

Polecenie wyglądało właśnie tak jak napisałem (tylko inne nazwy tabeli i kolumn). Problem chyba był w tym, że niektóre z tych wierszy, które chciałem usunąć miały odniesienia do innych tabeli (a niektóre nie miały) i tam gdzie te odniesienia były, SQL chciał przypisać wartości null do pól, które nie mogły mieć nulla. Chociaż z samego komunikatu błędu nic takiego wyczytać nie byłbym w stanie, niezbyt był on pomocny.

1

Moim zdaniem winny jest trigger na jakiejś tabeli. Może i nawet ABC, ale wcale nie musi tak być. Może to być zuepłeni inna tabela, której dotyka operacja usuwania danych na tabeli ABC - czy to za pomocą triggera, klucza obcego lub kombinacji obu.

Na pewno jest to trigger before/after DELETE.
I na pewno w nim jakiś "ktoś" napisał coś takiego:

create trigger ABC_AD for ABC
active AFTER DELETE 
as
begin
  declare variable @ID int;
  
  select @ID = ID
    from Tabela
    where ID = old.ID
end

I teraz wystarczy, że ten select:

  select @ID = ID
    from Tabela
    where ID = old.ID

Zwróci wiecej iż jeden wiersz i masz swój błąd.

PS.
Baza danych w sumie bez znaczenia, ale sądząc po komunikacie błęu może to być Firebird.

0
johnyjj2 napisał(a):

Polecenie wyglądało właśnie tak jak napisałem (tylko inne nazwy tabeli i kolumn).
Czyli NIE WYGLĄDA tak jak napisałeś - wstydzisz się tych nazw czy może są to super tajne nazwy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1