将受影响的行记录到MySQL中的另一个表中

时间:2016-05-20 05:13:01

标签: mysql

鉴于表格:

  CREATE TABLE `records` (
  `id_type` varchar(50) NOT NULL,
  `old_id` INT,
  `new_id` INT,
) ENGINE=InnoDB;

数据:

id_type | old_id | new_id
USER    | 11     | NULL
USER    | 15     | NULL
USER    | 56     | NULL
USER    | NULL   | 500
USER    | NULL   | 523
USER    | NULL   | 800

我想执行一个将返回的查询:

id_type | old_id | new_id
USER    | 11     | 500
USER    | 15     | 523
USER    | 56     | 800

2 个答案:

答案 0 :(得分:1)

Create table records_old
(
  id_type varchar(20) primary key,
  old_id int not null
);

Create table records_new
(
  id_type varchar(20),
  new_id int not null
);


insert into records_old(id_type,old_id) values ('USER1',11);
insert into records_old(id_type,old_id) values ('USER2',12);
insert into records_old(id_type,old_id) values ('USER3',13);

insert into records_new(id_type,new_id) values ('USER1',500);
insert into records_new(id_type,new_id) values ('USER2',600);
insert into records_new(id_type,new_id) values ('USER3',700);


select * from records_old;
select * from records_new;

select a.id_type,a.old_id,b.new_id from records_old a 
inner join records_new b
where a.id_type=b.id_type;

答案 1 :(得分:0)

SET @old_row_number = 0;
SET @new_row_number = 0;

SELECT OldData.id_type, OldData.old_id, NewData.new_id
FROM (SELECT id_type, old_id, (@old_row_number:=@old_row_number + 1) AS OldRowNumber
      FROM `records`
      WHERE old_id IS NOT NULL) OldData
JOIN (SELECT id_type, new_id, (@new_row_number:=@new_row_number + 1) AS NewRowNumber
      FROM `records`
      WHERE new_id IS NOT NULL) NewData ON NewData.NewRowNumber = OldData.OldRowNumber

带有id的过滤器不为空,并且作为两个子查询分开,并为每一行添加行号,然后在您的情况下加入将有所帮助。

Working Demo