Phristen
Новичок
Вопрос по SELECT с несколькими таблицами
Есть подобный запрос:
SELECT t1.*, COUNT(t2.c) AS t2c FROM t1, t2 WHERE t1.a=t2.b AND t1.d=1 GROUP BY t1.id
Если в колонке "b" таблицы t2 не находится значения, равного "a" из таблицы t1, то mysql возвращает пустой набор. (разумеется)
Вопрос: как сделать так, чтобы вместо пустого набора возвращался всё тот-же единственный ряд (где t1.d=1), но чтобы COUNT(t2.c) был равен нулю?
Единственное, что пришло в голову, это вот это:
(SELECT t1.*, COUNT(t2.c) AS t2c FROM t1, t2 WHERE t1.a=t2.b AND t1.d=1 GROUP BY t1.id)
UNION
(SELECT t1.*, 0 AS t2c FROM t1, t2 WHERE t1.d=1 GROUP BY t1.id)
Первая строка идентична начальному запросу.
Вторая - копия первой, но t2c заранее равно нулю, а условие t1.a=t2.b не проверяется.
Таким образом, первый ряд результата быдет всегда присутствовать. Но... Что, если сравнение будет происходить не между двумя таблицами, а между десятью? Не делать же 10^2 селектов на все случаи жизни?
P.S. Извиняюсь за возможно запутанное объяснение
Есть подобный запрос:
SELECT t1.*, COUNT(t2.c) AS t2c FROM t1, t2 WHERE t1.a=t2.b AND t1.d=1 GROUP BY t1.id
Если в колонке "b" таблицы t2 не находится значения, равного "a" из таблицы t1, то mysql возвращает пустой набор. (разумеется)
Вопрос: как сделать так, чтобы вместо пустого набора возвращался всё тот-же единственный ряд (где t1.d=1), но чтобы COUNT(t2.c) был равен нулю?
Единственное, что пришло в голову, это вот это:
(SELECT t1.*, COUNT(t2.c) AS t2c FROM t1, t2 WHERE t1.a=t2.b AND t1.d=1 GROUP BY t1.id)
UNION
(SELECT t1.*, 0 AS t2c FROM t1, t2 WHERE t1.d=1 GROUP BY t1.id)
Первая строка идентична начальному запросу.
Вторая - копия первой, но t2c заранее равно нулю, а условие t1.a=t2.b не проверяется.
Таким образом, первый ряд результата быдет всегда присутствовать. Но... Что, если сравнение будет происходить не между двумя таблицами, а между десятью? Не делать же 10^2 селектов на все случаи жизни?
P.S. Извиняюсь за возможно запутанное объяснение
