我有两个表,我需要合并,它们是:
CREATE TABLE IF NOT EXISTS `legacy_bookmarks` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`url` text,
`title` text,
`snippet` text,
`datetime` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `datetime` (`datetime`),
FULLTEXT KEY `title` (`title`,`snippet`)
)
和
CREATE TABLE IF NOT EXISTS `legacy_links` (
`id` mediumint(11) NOT NULL AUTO_INCREMENT,
`user_id` mediumint(11) NOT NULL,
`bookmark_id` int(11) NOT NULL,
`status` enum('public','private') NOT NULL DEFAULT 'public',
UNIQUE KEY `id` (`id`),
KEY `bookmark_id` (`bookmark_id`)
)
如您所见,“legacy_links”包含“legacy_bookmarks”的ID。我可以根据这种关系将两者合并吗?
我可以轻松地将“legacy_bookmarks”中ID列的名称更改为“bookmark_id”,如果这样可以使事情变得更容易。
您知道,列的顺序及其类型必须准确,因为此组合表中的数据将被导入新的“书签”表。
另外,我需要能够包含其他列(“修改”列,填充“datetime”值),并更改我的列的顺序。
任何参赛者?
答案 0 :(得分:1)
是的,它被称为连接,您可以这样做:
SELECT *
FROM legacy_bookmarks lb
INNER JOIN legacy_links ll ON ll.bookmark_id = lb.id
答案 1 :(得分:1)
[由你来改变列的顺序]
CREATE TABLE `legacy_linkss` AS
SELECT l.id, l.url, l.title, l.snippet, l.datetime AS modification, b.user_id, b.status
FROM
`legacy_links` l
JOIN `legacy_bookmarks` b ON b.id = l.bookmark_id
;
之后,在检查一致性并手动添加约束后,您可以:
DROP TABLE `legacy_links`;
DROP TABLE `legacy_bookmarks`;
RENAME TABLE `legacy_linkss` TO `legacy_links`;