MySQL запрос к реляционной базе данных, правильная терминология? - PullRequest
1 голос
/ 04 августа 2011

Я думаю, что моя проблема с базами данных связана с незнанием правильной терминологии, чтобы я сам мог найти ответ, поэтому я объясню обобщенную версию того, что я делаю, и, надеюсь, вы можете указать некоторые уроки по моему или дать мнеусловия для проверки.

Давайте рассмотрим пример каталога сотрудников.

Каждый сотрудник может иметь несколько мест, множество рабочих обязанностей, которые извлекаются из отдельной таблицы.Примеры таблиц и некоторые данные, давайте сосредоточимся на нескольких местах.

сотрудников Основные данные о сотрудниках - идентификатор (например: 400)- первый (например, Джон)- последний (напр .: Доу) 1012 * Места * Уникальный список локаций - идентификатор (например, 3000)- название (например, FakeCo, LLC)

map_employees_locations Свяжите ЛЮБОЕ количество мест с сотрудником - Я бы- employee_id (например: 400)- location_id (например: 3000)

Я борюсь с логикой того, как один запрос будет возвращать что-то вроде этого:ДжонланьФейкКо, ОООAnotherCo, LLCКажется, мне нужно было бы выполнить запрос, чтобы получить данные о сотруднике, затем в рамках вложенного запроса захватить местоположения, связанные с идентификатором сотрудника, и т. Д. Если бы было только одно местоположение на сотрудника, это было бы простое соединение, япросто не знаю, как обращаться с мультипликаторами.Дайте мне знать, если я далеко, я просто борюсь.

Ответы [ 2 ]

1 голос
/ 04 августа 2011

Вы бы соединили все столы вместе, как это

select e.id,e.first,e.last,l.id,l.title
from employees e
inner join map_employees_locations el
on el.employee_id = e.id
inner join locations l
on el.location_id = l.id
where e.first = 'John'
AND e.last = 'Doe'

Это вернет данные, как это:

e.id    e.first   e.last   l.id    l.title
------------------------------------------------
1       John      Doe      1       FakeCo, LLC
1       John      Doe      2       AnotherCo, LLC
0 голосов
/ 04 августа 2011

Если вам нужна только одна строка на сотрудника, вам, возможно, следует использовать групповой конкат

select id, e.last, e.first
     group_concat(l.title separator ',' ) as locations 
from employee e
join location l on l.employee_id = e.id
group by e.id

Не уверен насчет синтаксиса, потому что я больше знаю о postgres, но это должно сработать.

...