3

我有两个需要合并的表,它们是:

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”,如果这会使事情变得更容易的话。

正如您所知,列的顺序及其类型必须准确,因为来自该组合表的数据随后将被导入新的“书签”表。

此外,我需要能够包含其他列(“修改”列,填充“日期时间”值),并更改我拥有的列的顺序。

有接盘侠吗?

4

2 回答 2

1

是的,它称为联接,您可以这样做:

SELECT *
FROM legacy_bookmarks lb
INNER JOIN legacy_links ll ON ll.bookmark_id = lb.id
于 2013-05-06T20:22:15.387 回答
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`;
于 2013-05-06T20:23:04.887 回答