我有一些复杂的查询如下:
SELECT w,e2.EntityID
FROM (SELECT EntityID,SUM(frequency) w
FROM omid.entity_epoch_data where EpochID in
( select id from epoch where startDateTime>='2013-11-01 00:00:00' and
startDateTime <= '2013-11-30 00:00:00')
GROUP BY EntityID) e1
RIGHT JOIN
entity e2 ON e1.EntityID = e2.EntityID order by w desc
它可以正常工作,但只要我添加另一个内连接:
SELECT w,e2.EntityID
FROM (SELECT EntityID,SUM(frequency) w
FROM omid.entity_epoch_data inner join omid.entity_dataitem_relation as e3 on(e1.EntityID = e3.EntityID)
where e3.dataitemtype=3 and EpochID in
( select id from epoch where startDateTime>='2013-11-01 00:00:00' and
startDateTime <= '2013-11-30 00:00:00')
GROUP BY EntityID) e1
RIGHT JOIN
entity e2 ON e1.EntityID = e2.EntityID order by w desc
我收到以下错误:
列&#39; EntityID&#39;在字段集中是不明确的
有没有人知道我的错误在哪里?
更新:
我的版本如下(它完全符合我的要求)
SELECT ID,e2.EntityID,e2.Name,AVG(intensity),AVG(quality),SUM(frequency)
FROM omid.entity_epoch_data as e1
right JOIN entity AS e2 ON (e1.EntityID = e2.EntityID)
where EpochID in
( select id from epoch where startDateTime>='2013-11-01 00:00:00' and
startDateTime <= '2013-11-30 00:00:00') and e1.EntityID in
(SELECT entityid FROM omid.entity_dataitem_relation where dataitemtype=3)
group by e2.EntityID order by sum(frequency) desc;
但这需要时间,我需要改变
(SELECT entityid FROM omid.entity_dataitem_relation where dataitemtype=3)
group by e2.EntityID order by sum(frequency) desc;
to innerjoin任何人都可以帮助我如何做到这一点?
图片:
答案 0 :(得分:4)
你有两个问题。
首先,第一个INNER JOIN的语法不正确。您正在混淆语句的INNER JOIN和ON部分。 (至少,我认为情况就是这样,除非你的表名中确实有“。”字符真的需要这个JOIN的笛卡尔结果)&gt;
其次,EntityID的第二次使用(在您添加的新INNER JOIN中)可以引用INNER JOIN左侧或右侧的EntityID值 - 这就是错误中“不明确的列”的含义。
这是一些让你入门的SQL。它遵循您在下面的注释中给出的选择逻辑。它使用别名为每个表命名,并确保每列指定应从中绘制表的表。我没有方便的MySQL实例尝试它,但它应该让你开始。
SELECT E.EntityID, SUM(EED.Frequency)
FROM entity_epoch_data EED INNER JOIN entity_dataitem_relation EDR
ON EED.EntityID = EDR.EntityID WHERE EDR.entity_dataitemtype = 3
RIGHT OUTER JOIN entity E ON E.EntityID = EED.EntityID
GROUP BY E.EntityID
答案 1 :(得分:1)
也许两个表中都有名为EntityID
的字段 - omid.entity_epoch_data
和omid.entity_dataitem_relation
?
答案 2 :(得分:0)
您的第一个查询在子查询中只有一个用于查找entityid,但第二个查询在子查询中有两个表。
此外,在定义e1之前,您在子查询中引用表e1。
答案 3 :(得分:0)
为表提供一个特定的别名,并且该错误将消失..因为您有两列不能区分,所以当您尝试使用一列时,它不知道从哪个表中提取