V databázi si uživatelé zakládají seznamy kam si ukládají oblíbené položky a proto mám db tabulky favorite_list a favorite_list_item - favorite_list jsou jednotlivé seznamy oblíbených položek a v favorite_list_item pak jednotlivé položky. Uživatel může mít více seznamů.
Struktura tabulek:
favorite_list:
FL(pk), USER_ID, NAME, ...
favorite_list_item:
FLI(pk), FL, ITEM_ID, NAME, URL, DATE_CREATE,...
A teď bych chtěl přidat operaci pro kopírování položek z jednoho seznamu do druhého, ale v seznamu nesmí být stejné položky (item_id) a chtěl bych to udělat pokud možno jedním dotazem, resp. nějak rozumně optimalizovaně.
Zatím jsem vymyslel tento dotaz, ale mám pocit že to není optimální a asi by to šlo lépe, ale zatím netuším jak:
Kód: Vybrat vše
Toto jsem vymyslel a funguje, ale asi to není optimální. FL 2 je seznam ze kterého kopíruji data a FL 14 je cílový seznam
INSERT INTO favorite_list_item(FL, ITEM_ID, NAME, URL, DATE_CREATE)
(SELECT 14 AS FL, ITEM_ID, NAME, URL, DATE_CREATE
FROM favorite_list_item
WHERE FL = 2 AND ITEM_ID NOT IN (SELECT ITEM_ID FROM favorite_list_item WHERE FL = 14));