Autor Zpráva
Kreed
Profil *
Ahoj, potreboval bych poradit s jenou zapeklitou veci

Mam dve tabulky images a ArticleImages, ktere mam spojeny pomoci sloupce i_id. Potrebuji najit a smaza vsechnyt zaznamy v images, ktere se nenachazi v ArticleImages.

Zkousel jsem neco jako:
SELECT DISTINCT name FROM images,ArticleImages WHERE images.i_id!=ArticleImages.i_id,

ale vrati to vsechny zaznamy images, bez parametru distinct to vrati uplny nesmysl

Diky
Zechy
Profil
Ve chvíli kdy v Oracle Join chybí nebo je špatně podmínka, navrátí se, nebo spíše provede, Cartesian - každej řádek s každym. Co se týče distinct, ten pouze navrátí výsledek bez duplicitních hodnot.

Použil bych spíše subquery, kdy si tím poddotazem vytáhneš z druhý tabulky všechna data a přes NOT IN najdeš ty, které tam nejsou.
SELECT name FROM images WHERE i_id NOT IN (SELECT i_id FROM ArticleImages);
Camo
Profil
Kreed:
alebo cez left join:
SELECT i.name FROM images i LEFT JOIN ArticleImages a ON i.i_id = a.i_id WHERE a.i_id IS NULL;
Tori
Profil
Anebo
SELECT i.`name` 
FROM `images` i
WHERE NOT EXISTS (
    SELECT * 
    FROM `ArticleImages` ai
    WHERE ai.`i_id` = i.`i_id`
)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: