Использование возвращенной информации SELECT в mySQL - PullRequest
0 голосов
/ 20 марта 2012

В базе данных MySQL у меня есть две таблицы, связанные в объединении.Одна таблица содержит people details, а другая book details.Я хочу найти в базах данных определенного автора (principalWriter) и вернуть всех соавторов (additionalWriters), с которыми они работали.

Поэтому я использую

SELECT 
  books.additionalWriters, 
  people.name
FROM
  books
  INNER JOIN people ON books.principalWriter = people.personID 
WHERE personID = 1;

И это возвращает каждую книгу, над которой работал автор, с дополнительным идентификатором авторов.

Однако как я могу затем использовать эти возвращенные идентификаторы для поиска их соответствующих имен в таблице имен?Есть ли один запрос, который я могу сделать, чтобы выполнить это?

Ответы [ 3 ]

2 голосов
/ 20 марта 2012

Проблема здесь не в самом запросе, а в дизайне базы данных.У вас должны быть следующие таблицы:

  • Writers(*ID*, name): будут храниться все писатели (основной или нет)
  • Books(*ID*, name): будут храниться все книги
  • Writers_Books(*WriterID*, *BookID*, Principal): Это будет хранить отношения между авторами и книгами и будет указывать, является ли автор для этой книги основным или нет

Первичные ключи окружены звездочками

Примечание. Вы также можете удалить поле «Принципал» и добавить его в таблицу Books, но если книга окажется обязательной для основных авторов, вы не сможете решить эту проблему с помощью этой схемы.

Как только вы обновите свой дизайн, запрос станет намного проще.

1 голос
/ 20 марта 2012

вам нужно снова присоединить его к таблице народов. попробуйте это:

SELECT a.AdditionalWriters, c.name, b.name
FROM books a INNER JOIN people b ON
        a.PrincipalWriter = b.personID
     INNER JOIN people c ON a.additionalWriters = c.PersonID
WHERE   b.PersonID = 1
0 голосов
/ 20 марта 2012

Попробуйте следующее:

SELECT people.name FROM people WHERE personID in 
(SELECT 
  books.additionalWriters, 
FROM
  books
INNER JOIN people ON books.principalWriter = people.personID 
WHERE personID = 1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...