Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> DELETE z podzapytaniami, problem z zapytaniem mysql
BC_Rich
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 11.05.2005

Ostrzeżenie: (0%)
-----


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

Ten post edytował BC_Rich 11.05.2005, 19:47:03
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
popbart
post
Post #2





Grupa: Zarejestrowani
Postów: 255
Pomógł: 0
Dołączył: 22.04.2004
Skąd: Żoliborz

Ostrzeżenie: (0%)
-----


  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.
Go to the top of the page
+Quote Post
BC_Rich
post
Post #3





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 11.05.2005

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) )


Dzięki jeszcze raz!!!

Ten post edytował BC_Rich 12.05.2005, 01:51:14
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.08.2025 - 05:53