боролись с этим в течение всего дня и хотели бы попросить о помощи, как сделать этот запрос. Моя проблема заключается в том, что в частях WHERE для подпрограммы INNER JOIN мне нужно использовать соответствующие значения из каждой обрабатываемой строки таблицы GC, и очевидно, что подзапрос ничего не знает о главном запросе, поэтому он терпит неудачу. Надеюсь, вы поймаете идею, что я пытаюсь acomplish здесь:Подзапросы WHERE нужны поля из основного запроса
SET @now=100; #sunix datetime
SELECT a.id, b.maxdate
FROM GC AS a
INNER JOIN (
SELECT 0 id_group, MAX(dt_active_to) AS maxdate
FROM GCDeals
WHERE dt_active_from > a.dt_lastused AND dt_active_from <= @now
GROUP BY id_group
UNION ALL
SELECT 1 id_group, MAX(dt_active_to) AS maxdate
FROM GCDeals
WHERE id_group <> 2 AND dt_active_from > a.dt_lastused AND dt_active_from <= @now
UNION ALL
SELECT 2 id_group, MAX(dt_active_to) AS maxdate
FROM GCDeals
WHERE id_group <> 1 AND dt_active_from > a.dt_lastused AND dt_active_from <= @now
GROUP BY id_group
) AS b
ON a.id_group = b.id_group
LEFT JOIN GCMsg AS c
ON a.id = c.id_gc
WHERE a.is_active = 1 AND a.dt_lastused < @now AND c.id_gc IS NULL
ORDER BY a.id
Спасибо вам
Ваше заявление о выборе меня сбивает с толку. Вы группируете id_group. Таким образом, ваша таблица GCDeals имеет столбец id_group. Вы группируете его, а затем независимо от того, будет ли его значение заменено нулем во всех результирующих записях. И затем вы присоединяетесь к каждой записи GC с идентификатором 0 со всеми записями в GCDeals? Или id_group не colum в GCDeals (я думаю, MySQL это позволяет)? Тогда почему вы группируетесь буквально? Во всяком случае, это не выглядит хорошо для меня. –
У GCDeals есть много сделок, которые присваиваются каждой из этих групп 0-унисекс, 1-мужчина, 2-женщина. В таблице GC есть все клиенты, где каждый из клиентов принадлежит к определенной группе. Трудная часть здесь состоит в том, что если клиент находится в группе 0, maxdate находится для 0,1,2 групп (поскольку унисекс охватывает все три группы - сам, мужчина и женщина), если в 1 - тогда для 0,1 .. если в 2- то 0,2. Вот почему внутренний подзапрос соединения действительно идет и находит эти значения так, как он делает. – Maris
Подзапрос фактически возвращает мне всегда три строки с двумя столбцами: id_group, maxdate. id_group всегда 0,1,2, а maxdate вычисляется для (0 и 1 и 2) (0 и 1) (0 и 2) – Maris