使用LEFT JOIN

时间:2015-12-07 01:54:54

标签: mysql left-join

我有一个表(LocationEntries),它包含了我的应用程序收到某些设备位置的时间(timeReceived)。上述设备具有唯一的subscriberId。 第二个表包含这些subscriberIds和每个设备的实际Id。

我想识别发送位置更新不到10秒的设备。 查询类似于下面的查询:

SELECT LocationEntries.subscriberId, LocationEntries.timeReceived, Subscriber.id,
    Subscriber.suid 
FROM LocationEntries 
LEFT JOIN LocationEntries ON (LocationEntries.timeReceived - LocationEntries.timeReceived =< 10 ) 
LEFT JOIN Subscriber ON (Subscriber.id = subscriberId) 
GROUP BY Subscriber.id

但是我不确定是否可以对表进行LEFT JOIN,因为我每次尝试 Not unique table / akias:&#39; LocationEntries&#39; 错误执行命令 我做错了什么?

修改

我设法找到了有效的查询。

SELECT suid 
FROM Subscribers s 
LEFT JOIN LocationEntries l1 ON (s.id = l1.subscriberId) 
LEFT JOIN LocationEntries l2 ON (s.id = l2.subscriberId)
WHERE l1.timeReceived < l2.timeReceived AND TIMEDIFF(l2.timeReceived, l1.timeReceived) <= '00:00:10.0'
GROUP BY s.id

但是,由于表格中的企业数量(接近4,000,000)太多,因此查询无法及时提供结果。

1 个答案:

答案 0 :(得分:0)

是的,你可以在同一个表之间进行连接,只需要输入别名...... 但是,我不太确定这是否是你需要的......

也许这可行:

select LE.subscriberId, LE.timeReceived, SU.id, SU.suid
FROM LocationEntries LE 
LEFT JOIN Subscriber SU 
  ON SU.id = LE.subscriberId
WHERE LE.timeReceived =< 10
group by Subscriber.id;

对同一个表进行连接的想法是,例如,您有一个值在一列中的记录,并且您希望获得具有相同值但在另一列中的另一个记录/行