skanuj0321 (2)

skanuj0321 (2)



336 PHP i MySQL dla każdegc

Załóżmy teraz, że chcielibyśmy z pierwszej wersji tabeli Zam_Tymczas usunąć wszystkie wpisy, które w kolumnie Wartość mają wartość mniejszą niż średnia arytmetyczna ze wszystkich zamówień z tabeli Zamówienia. Tym razem podzapytanie trzeba wykorzystać w instrukcji DELETE. Podzapytanie znajdzie się oczywiście w klauzuli WHERE. Cala instrukcja będzie miała postać:

DELETE FROM ZAM.TYMCZAS WHERE Wartość < (

SELECT AVG(Wartosc)

FROM Zamówienia

Po jej wykonaniu w tabeli ZAM_TYMCZAS pozostaną jedynie następujące wiersze:

1 Imię | Nazwisko | Wartość 1

| Jan

| Kowalski |

15.88 |

j Andrzej

| Nowak

22.35 |

| Andrzej

j Nowak

22.35 |

| Janusz

| Malinowski |

18.48 |

| Adam

j Kowalski j

15.26 |

W analogiczny sposób wykorzystuje się podzapytania w instrukcji UPDATE. Należy jednak pamiętać, że zarówno w przypadku DELETE, jak i UPDATE w podzapytaniu nie może znajdować się odwołanie do tabeli uaktualnianej w zapytaniu głównym. Nie można zatem wykonać przykładowej instrukcji:

UPDATE Zamówienia

SET Wartość - Wartość * 0.95

WHERE Wartość > (

SELECT AVG(Wartość)

FROM Zamówienia AS Zam

):

gdyż zostanie zgłoszony błąd widoczny na rysunku 11.28.

mysql> UPDATE Zamówienia

-> SET Wartość = Wartość * 0.9S -> WHERE Wartość > (

-> SELECT AVG(WartOSc)

-> FROM Zamówienia AS Zam


ERROR 1093 (HY000): You OH clause


can't specify target table 'zamówienia1 for update


FR


Rysunek 11.28. Próba wykorzystania tej samej tabeli w podzapytaiu w instrukcji UPDATE


Wyszukiwarka

Podobne podstrony:
skanuj0443 460 PHP i MySQL dla każdego Pola nagłówek, treść i data są pobierane z tabeli News, natom
skanuj0278 (3) 292 PHP i MySQL dla każdego Oznacza to, że operacja zakończyła się sukcesem. Gdybyśmy
skanuj0161 (9) 172 PHP i MySQL dla każdego Zwraca ona ciąg strl, z którego począwszy od znaku o inde
skanuj0163 (9) 174 PHP i MySQL dla każdego Listing 6.12. Wykorzystanie funkcji strtok <?php $str

więcej podobnych podstron