Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Есть две таблицы:
mysql> SELECT * FROM a; +----+-----------+ | id | parent_id | +----+-----------+ | 1 | 0 | | 2 | 0 | | 3 | 0 | | 4 | 0 | +----+-----------+ mysql> SELECT * FROM links; +------+------+ | a_id | b_id | +------+------+ | 1 | 20 | | 2 | 20 | | 3 | 20 | | 1 | 30 | +------+------+
Соответственно, LEFT JOIN дает:
mysql> SELECT a.id, l.b_id -> FROM a -> LEFT JOIN links l ON a.id = l.a_id -> WHERE a.parent_id = 0; +----+------+ | id | b_id | +----+------+ | 1 | 20 | | 2 | 20 | | 3 | 20 | | 4 | NULL | | 1 | 30 | +----+------+
Что-то не пойму, как сделать запрос, который даст следующее:
+----+------+ | id | b_id | +----+------+ | 1 | 20 | | 2 | 20 | | 3 | 20 | | 4 | NULL | | 1 | 30 | | 2 | NULL | | 3 | NULL | | 4 | NULL | +----+------+
?
Вообще конечная задача - найти все записи из таблицы a, которые имеют полный набор соответствий определенной выборке из другой таблицы (частный случай: найти такие записи, у которые есть связи с полным набором записей из другой таблицы, без пропусков).
Я её хотел решить через подобный JOIN и выяснение наличия NULL-записей.
Можно через COUNT, но тогда одним запросом не получится (или же получится не очень красиво - сначала надо выяснить количество записей в главной таблице, чтобы знать, с чем сравнивать COUNT).
Неактивен
А без JOIN не пробовали играться? Старый добрый "FROM x, y" как раз все записи таблиц и сравнивает. В случае с JOIN запрос конечно будет не простой
Неактивен
FROM x, y - это все равно, что INNER JOIN.
Он не даст нужного результата, т.к. заведомо отсечет все записи из a, которых нет в links.
Неактивен
так тебе OUTER JOIN нужен? Тогда сделай комбинацию из LEFT и RIGTH JOIN и объедини результат с помощью UNION
Неактивен
Страниц: 1