Hm, hajde prvo koncepcijski da dođemo do rešenja; a performanse posle (ako postoje odgovarajući indeksi po polju za koji radiš NOT IN ili IN, pametan SQL engine će to fino odraditi i bez prolaska kroz 2M slogova, pogotovo ako je IN podskup dovoljno mali, što izgleda da je slučaj).
Znači, treba da dobiješ sve elemente za koje važi:
- owner ga ne poseduje i oni nemaju parenta
ili
- owner poseduje parenta ali ne poseduje child element
Nekako ovako:
Kôd:
Select * From Items Where
parentID = -1 and ItemID Not In (
Select ItemID from owners_items where ownerid = :ownerInQuestion
)
UNION
Select * From Items Where ParentID In (
Select ItemID from owners_items where ownerid = :ownerInQuestion
) And ItemID Not IN
(
Select ItemID from owners_items where ownerid = :ownerInQuestion
)