是否可以通过主键合并两个表?

时间:2013-05-06 20:18:11

标签: mysql

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

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”值),并更改我的列的顺序。

任何参赛者?

2 个答案:

答案 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`;