如果有人可以帮我解决这个问题,我将非常感激。
我的数据库实际上有2个表:书籍和作者列表。
book
表包含一个字段“book_aut
”,其中包含authorlist
表的外键。
authorlist
表只有2个字段,主键和'authors'列包含名称列表。
我必须修改表结构,以便通过名为“books
”的链接表将authors
表链接到lnk_book_author
表
所以我的第一个任务是创建一个名为'authors'的新表,其中包含3个字段 - primary id,name,surname,我已经这样做了。
接下来,我创建了一个名为“lnk_book_author
”的链接表,这个包含3个字段,主要ID,book_fk,author_fk。 book_fk和author_fk分别参考书籍和作者的身份。
我的问题是我在books表中有超过6000个条目,我想知道如何使用book id和author id填充链接表。
有没有办法使用sql而不是手动填充lnk_book_author表。
希望我很清楚..
非常感谢您提出的任何建议。
答案 0 :(得分:1)
那样的东西?
INSERT INTO lnk_book_author(book_fk,author_fk)
SELECT b.book_id,a.author_id
FROM books b INNER JOIN authorlist a
ON b.book_aut=a.author_id
答案 1 :(得分:1)
试试这个应该有效:
INSERT INTO lnk_book_author (book_fk, author_fk)
VALUES ((SELECT Id FROM books), (SELECT Id FROM authors))
顺便说一句,lnk_book_authors表中没有Id列,你也可以只使外键成为复合主键。
<强>更新强>
很抱歉,我发现这只适用于一条记录,请尝试以下SQL:
INSERT INTO lnk_book_author (book_fk, author_fk)
SELECT books.Id, authors.Id
FROM books, authors
答案 2 :(得分:1)
我推断你的新[authors]表中已有的ID对旧表没有任何意义。如果是这种情况,您需要通过名称关联记录。在那里我需要假设名称输入相同。如果他们不是,那可能无法做到。我们需要了解更多细节才能确定......
INSERT INTO
lnk_book_author
SELECT
Books.PrimaryKeyFieldName,
Authors.PrimaryKeyFieldName
FROM
Books
INNER JOIN
AuthorList
ON Books.BookAut = AuthorList.PrimaryKeyFieldName
INNER JOIN
Authors
ON CONCAT(',', AuthorList.Authors, ',') LIKE CONCAT('%,', Authors.Name, ',%')