Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: DELETE z podzapytaniami
Forum PHP.pl > Forum > Bazy danych > MySQL
BC_Rich
Witam,

mam trzy tabele:

produkt - [id_produkt].[nazwa_produktu]


kategoria - [id_kategoria].[nazwa_kategorii]


produkt_has_kategoria - [id_produkt_has_kategoria].[produkt_id_produkt]

w realcji n:m (każdy produkt może należeć do wielu kategorii)


Usuwając kategorię produktów chcę usunąć produkty, które należały tylko do tej kategorii tak, aby w tabeli "produkt" nie pozostały rekordy osierocone.

Chciałbym zrobić to w jednym zapytaniu korzystając z podzapytań.

To zapytanie:

DELETE FROM produkt WHERE id_produkt IN (
SELECT DISTINCT produkt_id_produkt
FROM produkt_has_kategoria
WHERE kategoria_id_kategoria = id_kategoria
)
AND id_produkt NOT
IN (

SELECT produkt_id_produkt, count( * ) AS ile
FROM produkt_has_kategoria
GROUP BY produkt_id_produkt
HAVING ile >=2
)

generuje błąd:
#1241 - Operand should contain 1 column(s)

Proszę o pomoc w poprawnym sformułowaniu tego zapytania.
Korzystam z MySQL 4.1.9

pozdrawiam
popbart
  1. DELETE
  2. FROM produkt WHERE id_produkt
  3. IN (
  4. SELECT DISTINCT produkt_id_produkt
  5. FROM produkt_has_kategoria WHERE kategoria_id_kategoria = id_kategoria
  6. ) AND id_produkt
  7. NOT IN (
  8. SELECT produkt_id_produkt
  9. FROM produkt_has_kategoria GROUP BY produkt_id_produkt
  10. HAVING count( * ) >=2)

Pzdr.
BC_Rich
Tak, to działa!
Wielkie dzięki

pozdrawiam

ps.
wiem, skąd brał się błąd:
moje podzapytanie
Kod
SELECT produkt_id_produkt, count( * ) AS ile
FROM produkt_has_kategoria
GROUP BY produkt_id_produkt
HAVING ile >=2


zwracało dwie kolumny:

ile | produkt_id_produkt

tutaj mogła wystąpić tylko jedna, stąd błąd:
#1241 - Operand should contain 1 column(s)

(to tak chciałem się pochwalić, że wiem, co zrobiłem źle winksmiley.jpg )


Dzięki jeszcze raz!!!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.