Я проиллюстрирую свой вопрос, поскольку понимаю, что это очень сбивает с толку.
Допустим, у вас есть три таблицы (данные несовместимы, это только для иллюстративных целей):
Категория
+----+----------+
| id | name |
+----+----------+
| 1 | History |
| 2 | Sci-fi |
| 3 | Mystery |
+----+----------+
Книга
+----+-----------------------------+
| id | category_id | name |
+----+-------------+---------------+
| 1 | 5 | Mowgli |
| 2 | 7 | Don Quixote |
| 3 | 11 | Ulysses |
+----+-------------+---------------+
Теги
+----+---------+-------------+
| id | book_id | name |
+----+---------+-------------+
| 1 | 452 | Bestseller |
| 2 | 42 | Novel |
| 3 | 921 | Novelty |
+----+---------+-------------+
Мне нужно выбрать все неназначенные теги для каждая книга.
Ниже приведен запрос, который просто показывает все теги для каждой категории, для каждой книги, где мне нужно (я повторяюсь здесь), чтобы выбрать только те теги, которые назначены любой другой книге, но не текущий.
Другими словами, чтобы выбрать только те теги, которые еще не были присвоены книге.
SELECT c.id category_id, b.name, t.book_id, t.id tag_id
FROM tags t
LEFT JOIN book b ON b.id=t.book_id
LEFT JOIN category c ON c.id=b.category_id