Похоже, ваш существующий код может работать там, где documents.staffID = staff.ID
- где с документом связан только один идентификатор персонала?
Было бы лучше добавить таблицу для моделирования отношений между документами и персоналом отдельно от любого из них, а также удалить или исключить поле staffID в таблице документов. Вам нужно что-то вроде
CREATE TABLE document_staff (
document_id <type>,
staff_id <type>
)
Вы можете включать составные индексы с ( document_id, staff_id )
и ( staff_id, document_id )
, если у вас много данных и / или вы хотите эффективно пересмотреть отношения в обоих направлениях.
(Вы не упоминаете типы данных для своих полей идентификаторов, но documents.staffID
, кажется, является своего рода varchar, основанным на том, что вы говорите - возможно, вы могли бы использовать вместо них целочисленный тип?)
Но вы, вероятно, можете добиться того, чего хотите, используя существующую схему и функцию MySQL FIND_IN_SET :
SELECT
organizations.orgName,
documents.docName,
documents.docEntry,
documents.staffID,
staff.Name,
staff.ID
FROM
documents
INNER JOIN organizations ON (documents.IDorg = organizations.IDorg)
INNER JOIN staff ON ( FIND_IN_SET( staff.ID, documents.staffID ) > 0 )
Типы наборов MySQL имеют ограничения - например, максимальный размер членства - 64, но могут быть достаточными для ваших нужд.
Если бы это был я, я бы поменял модель, а не использовал FIND_IN_SET
.