我对MySQL查询有一点问题,我暂时没有在网站上找到答案(也许我会想念它?)
问题是在子子查询中检索根父级的值。
很快,该项目是一名广告经理。我想找到一个广告系列在一个月内花费的金额,可以包含多个广告,每个广告可以有不同的价格。 因此,结果按广告系列进行分组,但所花费的资金必须按照广告进行分组才能按广告系列进行分组;我需要获得一些其他信息,这就是我制作子查询的原因。
实际查询是:
SELECT
COUNT(l.lgs_mkt_user_campaign_keyid) AS nbClics,
l.mkt_user_ad_keyid,
a.mkt_user_ad_ppc,
a.usr_user_keyid,
r.mkt_rel_user_campaign_ad_score,
c.mkt_user_campaign_ppm,
(
SELECT SUM(usr_user_money_spent) FROM (
SELECT
(a2.mkt_user_ad_ppc * COUNT(l2.lgs_mkt_user_campaign_keyid)) AS usr_user_money_spent
FROM
lgs_mkt_user_campaigns l2
LEFT JOIN
mkt_user_ads a2 ON a2.mkt_user_ad_keyid = l2.mkt_user_ad_keyid
WHERE
l2.mkt_user_campaign_keyid = l.mkt_user_campaign_keyid
GROUP BY
l2.mkt_user_ad_keyid
) AS Sub
) AS usr_user_money_spent
FROM
lgs_mkt_user_campaigns l
LEFT JOIN
mkt_user_ads a ON a.mkt_user_ad_keyid = l.mkt_user_ad_keyid
LEFT JOIN
mkt_rel_user_campaigns_ads r ON r.mkt_user_ad_keyid = l.mkt_user_ad_keyid
LEFT JOIN
mkt_user_campaigns c ON c.mkt_user_campaign_keyid = l.mkt_user_campaign_keyid
WHERE
l.lgs_mkt_user_campaign_datecrea BETWEEN '2012-11-01' AND '2012-11-30'
AND l.lgs_mkt_user_campaign_is_clic = 1
GROUP BY
c.mkt_user_campaign_keyid
问题出在第17行的WHERE子句中:l2.mkt_user_campaign_keyid = l.mkt_user_campaign_keyid
别名“l”无法通过子查询处理(我找不到任何其他解决方案来实现这一点......)
我真的不想在这个WHERE子句中编写另一个子查询来检索相同的l.mkt_user_campaign_keyid
,我认为这将是一个坏主意,因为它会为此“仅仅”提出一个巨大的请求。
有没有人知道如何实现这个目标?
非常感谢,1)抱歉我的英文;),2)很抱歉,如果解决方案已经在stackoverflow上,我没有找到它:/
[编辑]
解释子查询的一些细节:
mkt_user_campaigns
:包含所有广告系列,用户包含外键mkt_user_ads
:包含所有广告,用户包含外键mkt_rel_user_campaigns_ads
:将广告与广告系列绑定lgs_mkt_user_campaigns
:记录广告的所有点击次数主要查询检索有关广告系列的一些信息,我需要知道广告系列的费用。 子查询尝试检索每个广告系列的费用。
包含更多详细信息的子查询:
它会尝试为广告系列查找所有要点击的广告,次数和最终费用(ppc =每次点击价格)。在这里,WHERE子句会遗漏一些细节,比如日志的日期,但我把它变得更具可读性。
此子查询必须返回与主体查询相同的Campaign的结果,这就是这里的难度