Mysql 使用左连接的SQL请求
我有两张桌子 表A:id、类型。。。 这里id是一个主键 表B:id、时间戳、旧类型、新类型。。。 此处id不是主键Mysql 使用左连接的SQL请求,mysql,sql,Mysql,Sql,我有两张桌子 表A:id、类型。。。 这里id是一个主键 表B:id、时间戳、旧类型、新类型。。。 此处id不是主键 我想发出一个sql请求,返回这样的ID,每个ID的A.type与上一个by timestamp B.new_type不同。这对您有帮助吗 select a.* from A a where a.type!= ( select b.new_type from B b order by `timestamp` desc limit 1 ) 尝试: 使用触发器记录事件,如以
我想发出一个sql请求,返回这样的ID,每个ID的A.type与上一个by timestamp B.new_type不同。这对您有帮助吗
select a.* from A a where a.type!= (
select b.new_type from B b order by `timestamp` desc limit 1
)
尝试:
使用触发器记录事件,如以下未经测试的代码:
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;
请看下面的内容,以便进一步阅读。为您的问题提供一些上下文是很有帮助的。调用事物A和B会使我们更难理解您的问题。请显示示例数据和输出。或者创建sql Fiddle您的问题缺少信息。我们如何对表B进行分组?B是对a的更改日志吗?您使用的是哪种RDBMS SQLServer、MySQL、Oracle等?答案可能与查询的编写方式直接相关。谢谢,我刚刚在括号中添加了A.id=B.id。但是现在它工作得很慢:不客气。。我会更新我的答案来解决你的问题,但我现在必须离开,明天我会给你适当的询问。。但我想在那之前你会自己得到答案的,祝你好运。
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;