内部联接不起作用

时间:2014-04-06 23:04:24

标签: mysql sql left-join inner-join

我有一些复杂的查询如下:

 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任何人都可以帮助我如何做到这一点?

图片:

enter image description here

enter image description here

4 个答案:

答案 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_dataomid.entity_dataitem_relation

答案 2 :(得分:0)

您的第一个查询在子查询中只有一个用于查找entityid,但第二个查询在子查询中有两个表。

此外,在定义e1之前,您在子查询中引用表e1。

答案 3 :(得分:0)

为表提供一个特定的别名,并且该错误将消失..因为您有两列不能区分,所以当您尝试使用一列时,它不知道从哪个表中提取