我正在将客户端数据库移植到具有不同帖子标题和行ID的新客户端数据库,但他希望保留旧网站的点击量,
他在新数据库中有超过500篇文章,更新一篇文章不是这个查询的问题
UPDATE blog_posts
SET hits=8523 WHERE title LIKE '%slim charger%' AND category = 2
但是如何通过1个查询对所有500篇文章执行此操作?我已经有来自旧数据库的导出查询和帖子标题和点击,所以我们可以更容易地找到新的
INSERT INTO `news_items` (`title`, `hits`) VALUES
('Slim charger- your new friend', 8523 )...
两个表中唯一的引用是标题中的产品名称字,其他一切都不同,id,完整标题......
答案 0 :(得分:3)
在tmp
old_posts
表
UPDATE new_posts LEFT JOIN old_posts ON new_posts.title = old_posts.title SET new_posts.hits = old_posts.hits;
答案 1 :(得分:0)
我不是100%确定您可以一次更新多个记录,但我认为您要做的是将循环与更新查询结合使用。
但是,如果你有2个表之间没有任何关系或它们之间有共同的标识符,那么你就有点困难了。在这种情况下,硬盘的意思是你必须手动完成所有这些:(
保存你的最后一个可能的想法是id可能不同,但它们可能仍然具有相同的顺序。如果是这种情况,您仍然可以遍历旧表并更新数字表,如上所述。
答案 2 :(得分:0)
不幸的是,它不是如何工作的,你将不得不编写一个循环的脚本/程序。
articles cursor;
selection articlesTable%rowtype;
WHILE(FETCH(cursor into selection)%hasNext)
Insert into newTable selection;
END WHILE
如何桥接它取决于你,但那是基本的伪代码/ PLSQL。
用于从一个数据库中选择并放入另一个数据库的API因DBMS而异,因此您需要一个通用的中间格式。基本上从第一个数据库获取记录,将其粘贴到您选择的编程语言中的结构中,并使用这些结构值使用API为其他DBMS预先插入。
答案 3 :(得分:0)
您可以构建一个为您执行此操作的过程:
CREATE PROCEDURE insert_news_items()
BEGIN
DECLARE news_items_cur CURSOR FOR
SELECT title, hits
FROM blog_posts
WHERE title LIKE '%slim charger%' AND category = 2;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN news_items_cur;
LOOP
IF done THEN
LEAVE read_loop;
END IF;
FETCH news_items_cur
INTO title, hits;
INSERT INTO `news_items` (`title`, `hits`) VALUES (title, hits);
END LOOP;
CLOSE news_items_cur;
END;