-
-
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