-
-
Save hrach/a814eb6e715080fa781a to your computer and use it in GitHub Desktop.
select * | |
from authors | |
where not exists ( | |
select * | |
from books | |
left join books_x_tags on (books_x_tags.book_id = books.id) | |
left join tags on (tags.id = books_x_tags.tag_id) | |
where | |
books.author_id = authors.id | |
and tags.name = 'PHP' | |
) |
milo: +1
SELECT * FROM author INNER JOIN book USING (authorID)
WHERE bookID NOT IN (SELECT bookID FROM tag_x_book WHERE tagID = 'PHP')
-- nutnost indexu nad vsemi idecky
-- vnitrni select nesmi byt wildcard
-- USING netreba pouzivat, nechtela se mi rozepisovat podminka
-- jedna se o typicky priklad relacniho rozdilu
-- takto postaveny dotaz by mohl byt solidne optimalizovany a rychly i v MySQL
@ZZromanZZ To je špatně. Vypadnou Ti autoři bez knih (sporné zadání) a dostaneš i autora, který napsal více knih včetně jedné o PHP.
@milo 👍
Pravda, netestuju vysledek.
Co tohle ?
SELECT * FROM author WHERE authorID IN (SELECT authorID FROM book WHERE bookID NOT IN (SELECT bookID FROM tag_x_book WHERE tagID = 'PHP'))
Ale uz si nemyslim(pokud je to dobre), ze to bude nejak vyrazne rychle...
@milo no jasny :) 👍
Také se to dá takhle