Как я могу преобразовать этот запрос доступа в запрос MySQL - PullRequest
0 голосов
/ 09 сентября 2018

Этот вопрос является продолжением следующего вопроса: Как мне преобразовать этот запрос доступа в запрос mySQL?

Я хочу представить вышеизложенное в моем коде следующим образом:

Оператор Access SQL FROM выглядит следующим образом

FROM qryvw_employees 
INNER JOIN ((Tbl_Clients INNER JOIN (Tbl_Assignments 
INNER JOIN Tbl_Tasks ON Tbl_Assignments.Assignment_ID = Tbl_Tasks.Assignment_ID) ON Tbl_Clients.PAN = Tbl_Assignments.PAN) 
INNER JOIN qryvw_subtasks ON Tbl_Tasks.TaskID = qryvw_subtasks.TaskID) ON qryvw_employees.ID = Tbl_Tasks.Assigned_To

На основе ответа в этом запросе я пытаюсь это:

FROM 
qryvw_employees
INNER JOIN (tbl_clients 
INNER JOIN tbl_assignments ON tbl_clients.`PAN` = tbl_assignments.`PAN`
INNER JOIN tbl_tasks ON tbl_assignments.`Assignment_ID` = tbl_tasks.`Assignment_ID`
INNER JOIN qryvw_subtasks ON tbl_tasks.`TaskID` = qryvw_subtasks.`TaskID`) ON qryvw_employees.`ID` = tbl_tasks.`Assigned_To`

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

помогите плз, не удаляйте на основании низкой репутации. это действительно правильное сомнение, поскольку две таблицы имеют отношение один ко многим, и это не рассматривается в вышеупомянутом вопросе.

Мой вопрос заключается в том, как мне представить отношение два ко многим (как показано на диаграмме) в выражении SQL. Это продолжение того, как я могу преобразовать этот запрос доступа в запрос MySQL? ссылка выше.

Ответы [ 4 ]

0 голосов
/ 25 сентября 2018

Запрос работает в MySQL, когда оператор сгенерирован самим Access ите. Никаких изменений не требуется. Вот ответ ниже:

FROM 
qryvw_employees
INNER JOIN (tbl_clients 
INNER JOIN tbl_assignments ON tbl_clients.`PAN` = tbl_assignments.`PAN`
INNER JOIN tbl_tasks ON tbl_assignments.`Assignment_ID` = tbl_tasks.`Assignment_ID`
INNER JOIN qryvw_subtasks ON tbl_tasks.`TaskID` = qryvw_subtasks.`TaskID`) ON qryvw_employees.`ID` = tbl_tasks.`Assigned_To`
0 голосов
/ 09 сентября 2018

Я думаю, что ваше предложение будет похоже на

     FROM qryvw_employees INNER JOIN 
     ((Tbl_Clients INNER JOIN 
  (Tbl_Assignments INNER JOIN Tbl_Tasks 
  ON Tbl_Assignments.Assignment_ID = Tbl_Tasks.Assignment_ID)
   ON Tbl_Clients.PAN = Tbl_Assignments.PAN) 
  INNER JOIN qryvw_subtasks ON Tbl_Tasks.TaskID = qryvw_subtasks.TaskID)
  ON qryvw_employees.ID = Tbl_Tasks.Assigned_To
0 голосов
/ 09 сентября 2018

Предложение FROM приводит к списку подзадач, умноженному на все клиенты, связанные с назначениями подзадач.

Вы можете начать с любого стола, решать вам. Давайте сохраним этот стол для сотрудников. Затем присоединитесь к следующей таблице. Таблица, относящаяся к сотрудникам, является таблицей задач. Возьмите это и присоедините к нему на сотрудника ID. Следующая таблица для присоединения может быть либо таблицей подзадач, либо таблицей назначений. Выберите тот, который И так далее, всегда добавляйте следующую таблицу к тому, что у вас уже есть.

from qryvw_employees e
join tbl_tasks t on t.assigned_to = e.id
join qryvw_subtasks st on st.taskid = t.taskid
join tbl_assignments a on a.assignment_id = t.assignment_id
join tbl_clients c on c.pan = a.pan

Если вы не выбираете столбцы из всех таблиц в предложении SELECT или если в запросе есть некоторая агрегация (SUM, COUNT, ..., GROUP BY, DISTINCT, может быть? ), тогда вы можете захотеть объединить производные таблицы (подзапросы) или переместить таблицы в предложение WHERE для удобства чтения и / или производительности. Не видя, что вы на самом деле выбираете, это все советы, которые я могу дать.

0 голосов
/ 09 сентября 2018

делайте тот факт, что вы просто используете INNER-запрос, вы не должны использовать () и вложенный подзапрос.

  select your_col1, your_col2, ..., your_colN

  FROM qryvw_employees 
  INNER JOIN Tbl_Assignments 
  INNER JOIN Tbl_Tasks ON Tbl_Assignments.Assignment_ID = Tbl_Tasks.Assignment_ID
  INNER JOIN Tbl_Clients ON Tbl_Clients.PAN = Tbl_Assignments.PAN
  INNER JOIN qryvw_subtasks ON Tbl_Tasks.TaskID = qryvw_subtasks.TaskID
  INNER JOIN  ON qryvw_employees.ID = Tbl_Tasks.Assigned_To

в любом случае в mysql каждый вложенный подзапрос должен иметь имя с соответствующим псевдонимом, например: selectиз (выберите .... из my_table) t1_alias

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...