一直在这一整天挣扎,并希望寻求帮助如何使这个查询发生。我的问题是,在INNER JOIN子查询的WHERE部分中,我需要使用来自每个正在处理的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列。你按它进行分组,然后不管它的值是否用所有结果记录中的零代替。然后你加入所有GCDeals记录的ID为0的每个GC记录?或者是id_group不是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