sql для заполнения вновь созданной таблицы ссылок - PullRequest
0 голосов
/ 22 июня 2011

Я был бы очень признателен, если бы кто-нибудь помог мне с этим ..

У меня на самом деле есть две таблицы в моей базе данных: книги и список авторов.

Таблица book содержитполе 'book_aut', которое содержит внешний ключ таблицы authorlist.

Таблица authorlist содержит только 2 поля: первичный ключ и столбец «авторы», который содержит список имен.

Мне нужно изменить структуру таблицы так, чтобы таблица books была связана с таблицей authors через таблицу ссылок с именем 'lnk_book_author'

Поэтому моя первая задача - создатьновая таблица с именем «авторы», которая содержит 3 поля - основной идентификатор, имя, фамилию, которую я уже сделал.

Затем я создал таблицу ссылок с именем «lnk_book_author», а эта таблица содержит 3 поля,основной идентификатор, book_fk, author_fk.Book_fk и author_fk ссылаются на идентификатор книги и автора соответственно.

Моя проблема в том, что у меня более 6000 записей в таблице книг, и я хотел бы знать, как заполнить таблицу ссылок книгойid и идентификатор автора.

Есть ли способ сделать это, используя sql вместо того, чтобы вручную заполнять таблицу lnk_book_author.

Надеюсь, я был достаточно ясен ..

Спасибомного для любого предложения.

Ответы [ 3 ]

1 голос
/ 22 июня 2011

Попробуйте, это должно работать:

INSERT INTO lnk_book_author (book_fk, author_fk)
VALUES ((SELECT Id FROM books), (SELECT Id FROM authors))

И, кстати, нет смысла иметь столбец Id в таблице lnk_book_authors, вы также можете просто сделать внешние ключи составным первичным ключом.

ОБНОВЛЕНИЕ

Извините, я понимаю, что будет работать только с одной записью, попробуйте следующий SQL:

INSERT INTO lnk_book_author (book_fk, author_fk)
SELECT books.Id, authors.Id
FROM books, authors
1 голос
/ 22 июня 2011

Я предполагаю, что идентификаторы уже в вашей новой таблице [авторы] ничего не значат в отношении старых таблиц. Если это так, вам нужно связать записи по имени. И там я должен предположить, что имена вводятся одинаково. Если это не так, это может быть невозможно сделать. Нам нужно знать гораздо больше подробностей, чтобы быть уверенным ...

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, ',%')
1 голос
/ 22 июня 2011

Что-то в этом роде?

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...