Я пытаюсь объединить три таблицы и получить активный план поставщика. Вполне возможно, что у продавца было много планов в прошлом, но активен в том, что считается. Весь запрос больше (подсчет элементов, которые он имеет aso), и из-за этого я сделал это с подзапросом, но для этого примера этого должно быть достаточно.Mysql query subselect получение NULL
Я всегда получаю plantitle и planstatus из NULL. Как я могу это исправить?
Запрос
SELECT v.title
, plans.title AS plantitle
, uplans.status AS planstatus
, uplans.uid
, COUNT(DISTINCT obs.id) AS obj_count
, sum(case when obs.published = -1 then 1 else 0 end) trash
, sum(case when obs.published = 1 then 1 else 0 end) published
, sum(case when obs.published = 0 then 1 else 0 end) unpublished
FROM `vendors` AS v
LEFT JOIN objects AS obs ON obs.vid = v.id
LEFT JOIN `userplans` AS uplans ON uplans.uid = (
SELECT up.id
FROM `userplans`AS up
WHERE up.uid=v.uid AND status = "ACTIVE" LIMIT 1)
LEFT JOIN `plans` AS plans ON plans.id=uplans.pid
GROUP BY v.id
ORDER BY v.id asc
Столы
Vendors
id, uid, title
10, 1, Name 1
20, 4, Name 2
30, 5, Name 3
Plans
id, title
40, Plan 1
50, Plan 2
Userplans
id, uid, pid, status
1, 1, 40, CANCELED
2, 1, 50, CANCELED
3, 1, 40, CANCELED
4, 4, 50, CANCELED
5, 4, 50, CANCELED
6, 4, 50, ACTIVE
7, 1, 40, ACTIVE
делает план только и всегда иметь один активный статус и пользователь? – xQbert
Зачем вам нужны левые соединения? V.userID = UP.UID, UP.PID = P.ID, где UP.status = 'ACTIVE' похоже, что он вернет всех продавцов, у которых есть активные планы пользователей вместе с заголовком плана ... – xQbert
обновил запрос – Mike