Esta pregunta es la continuación de la siguiente pregunta: ¿Cómo convierto esta consulta de acceso en una consulta mySQL?

Quiero representar lo anterior en mi código de la siguiente manera:

La instrucción de acceso SQL FROM es la siguiente

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

Según la respuesta en esta consulta, estoy intentando esto:

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`

El diagrama de la relación anterior que estoy tratando de lograr es el siguiente: ingrese la descripción de la imagen aquí

Por favor, ayude, no elimine en base a la baja reputación. Esta es una duda genuinamente adecuada, ya que dos tablas tienen una relación de uno a muchos y esto no está cubierto en la pregunta anterior.

Mi pregunta es cómo represento la relación uno a muchos (como se muestra en el diagrama) en la declaración SQL. Esta es la continuación de ¿Cómo convierto esta consulta de acceso a la consulta mySQL? enlace de arriba.

-2
Eager Einstein 9 sep. 2018 a las 09:37

4 respuestas

La mejor respuesta

La consulta funciona en MySQL cuando la declaración es la generada por Access itelf. No se requiere cambio. Aquí está la respuesta a continuación:

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
Eager Einstein 25 sep. 2018 a las 08:05

El hecho de que solo está utilizando la consulta INNER no debe usar () y la subconsulta anidada.

  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

de todos modos en mysql cada subconsulta anidada debe nombrarse con el alias apropiado, por ejemplo: seleccione de (seleccione ... de my_table) t1_alias

0
scaisEdge 9 sep. 2018 a las 06:58

La cláusula FROM da como resultado una lista de subtareas multiplicada con todos los clientes que están relacionados con las asignaciones de las subtareas.

Puede comenzar con cualquier mesa, depende de usted. Mantengamos esta tabla de empleados. Entonces únete a la siguiente mesa. La tabla relacionada con los empleados es la tabla de tareas. Toma esto y únete a él en la identificación del empleado. La siguiente tabla a unir puede ser la tabla de subtareas o la tabla de asignaciones. Elige el que sea. Y así sucesivamente, siempre agregue la siguiente tabla a lo que ya tiene.

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

Si no selecciona columnas de todas las tablas en su cláusula SELECT o si hay alguna agregación en la consulta (SUM, COUNT, ..., GROUP BY, DISTINCT ¿quizás?), Entonces es posible que desee unir tablas derivadas (subconsultas) o mover tablas a la cláusula WHERE para facilitar la lectura y / o el rendimiento. Sin ver lo que realmente está seleccionando, este es todo un consejo que puedo darle.

0
Thorsten Kettner 9 sep. 2018 a las 07:33

Creo que su cláusula será como a continuación

     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
Zaynul Abadin Tuhin 18 sep. 2018 a las 05:42