2013-02-19 47 views
0

我打破了我的头试图修改此查询(thx sgeddes)以便 不仅从db_events.events字段获得结果,而是将其与某些db_system结合使用。设备领域修改MYSQL查询以获得两个表之间的JOIN

SELECT e.* 
FROM db_events.events e 
    JOIN (
     SELECT Max(id) MaxId, device_id 
     FROM db_events.events 
     GROUP BY device_id) e2 on e.Id = e2.MaxId AND e.device_id = e2.device_id 
WHERE e.device_id IN (
      SELECT device_id 
      FROM db_system.devices 
      WHERE vendor = 1) 
ORDER BY e.id DESC 

我怎样才能得到它不重复的子查询:

  SELECT * 
      FROM db_system.devices 
      WHERE vendor = 1 

我需要得到db_system.devices.branddb_system.devices.model与最终结果加盟, 我试图修改它一步一步来,我尝试了临时表,我怀疑它应该是简单的,但我一直没有能够做到,当然非常感谢你...

回答

3

这是你想要的吗?

SELECT e.*, a.* 
FROM db_events.events e 
     INNER JOIN 
     (
      SELECT Max(id) MaxId, device_id 
      FROM db_events.events 
      GROUP BY device_id 
     ) e2 on e.Id = e2.MaxId AND 
       e.device_id = e2.device_id 
     INNER JOIN db_system.devices a 
      ON e.device_id = a.device_id AND 
       a.vendor = 1 
ORDER BY e.id DESC 

条件a.vendor = 1也可以在WHERE条款感动,因为你正在使用INNER JOIN

SELECT .... 
FROM .... JOIN .... 
WHERE a.vendor = 1 
ORDER BY ... 
+1

我想这就是他想要的东西,结果还是一样 - 我刚才看到他的评论对我的以前的回答 - 谢谢@JW! +1 – sgeddes 2013-02-19 13:50:49

+0

@ JW,@ sgeddes,伙计们,我试图理解它,你如何应用逻辑来解决它?似乎在内部解决......嗯,非常感谢。 – user1913878 2013-02-19 14:21:24

+1

子查询分别为表db_events.events中的每个'device_id'获取最大'ID'。子查询的结果然后在表'db_events.events'(*自排连接*)上重新连接,只要它匹配'MaxID'和'device_id'。然后,表部分结果再次在表db_system.devices中加入,以便您可以获取记录具有相同'device_id'的其他值 – 2013-02-19 14:27:10