使用左连接的SQL请求

时间:2013-03-18 13:37:25

标签: mysql sql

我有2张桌子。

表A:(id,type,...)
这里id是主键

表B:(id,timestamp,old_type,new_type,...)
这里id不是主键

我想创建一个sql请求,返回这些ID,每个都与A.type不同,最后一个(通过时间戳)B.new_type。

3 个答案:

答案 0 :(得分:1)

这对尼基塔有帮助吗?

select a.* from A a where a.type!= (
     select b.new_type from B b order by `timestamp` desc limit 1
)

答案 1 :(得分:0)

尝试:

select a.id, a.type
from A a
join (select id, max(`timestamp`) max_timestamp from B group by id) mb
  on a.id = mb.id
join B b on mb.id = b.id and mb.max_timestamp = b.`timestamp`
where a.type <> b.new_type

答案 2 :(得分:0)

使用触发器记录事件,类似这样的事情(未经测试的代码):

CREATE TRIGGER logger BEFORE UPDATE ON A
FOR EACH ROW
BEGIN
  IF NEW.Type <> OLD.Type THEN
    INSER INTO B(id, timestamp, old_type, new_type, ...) 
      VALUES (id, CURRENT_TIMESTAMP, OLD.Type, NEW.Type, ...)
  END IF;        
END;

请查看documentation以便进一步阅读。