Delete z podzapytaniem

0

Bardzo proszę o pomoc w tym zadaniu. Próbowałem wykonać je za pomocą delete oraz select ale otrzymuję komunikat:

You can't specify target table 'Statystyki' for update in FROM clause

Udało mi się jedynie znaleźć informację o tym, że nie można stosować takiej kombinacji zapytań.

Z tabeli Statystyki należy usunąć te wiersze, których wartości liczbowe w kolumnie wartosc1
nie są równe wartości maksymalnej ani minimalnej w tej kolumnie.

 desc Statystyki;
+----------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+----------------+
| ID_stat | int(11) | NO | PRI | NULL | auto_increment |
| wartosc1 | int(11) | YES | | NULL | |
| wartosc2 | int(11) | YES | | NULL | |
+----------+---------+------+-----+---------+----------------+

baza danych: mysql

0
  1. jaka baza
  2. komentarze nie są do udzielania odpowiedzi!
1

Twoje query jest OK - zadziała np. na oraclu,
ale niestety MySql nie pozwala na takie zapytania,
trzeba stosować magiczne sztuczki.
Przepisz to w ten sposób:
[code]
delete from Statystyki
where ID_stat !=( select mx from (select max(ID_stat) mx from Statystyki) xx )
and ID_stat != (select mi from (select min(ID_stat) mi from Statystyki) yy );
[/code]

0
kordirko napisał(a)

[code]
delete from Statystyki
where ID_stat !=( select mx from (select max(ID_stat) mx from Statystyki) xx )
and ID_stat != (select mi from (select min(ID_stat) mi from Statystyki) yy );
[/code]

Ja w takim przypadku wykorzystałbym jednak procedurę/funkcję - chyba większa czytelność będzie i łatwiej w utrzymaniu. Chyba że to zadanie na uczelnię - to wtedy można zaakceptować takiego potworka.

0

@kordirko dziękuje przetestowałem i wszystko działa teraz jak należy.
@Hostel tak zadanie dostaliśmy na kartkówce na uczelni.

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