【问题标题】:How do I convert this Access Query to mySQL query如何将此访问查询转换为 mySQL 查询
【发布时间】:2019-02-13 22:56:12
【问题描述】:

这个问题是以下问题的延续: How do I convert this Access Query to mySQL query?

我想在我的代码中将上述内容表示如下:

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`

我试图实现的上述关系图如下: enter image description here

请帮忙,不要以低信誉为由删除。这确实是一个正确的疑问,因为两个表具有一对多的关系,而上述问题并未涵盖这一点。

我的问题是如何在 SQL 语句中表示两个一对多的关系(如图所示)。这是我如何将此 Access 查询转换为 mySQL 查询的延续?上面的链接。

【问题讨论】:

  • 现在有什么问题???

标签: mysql sql database ms-access


【解决方案1】:

当语句由 Access 自身生成时,查询在 MySQL 中有效。无需更改。答案如下:

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`

【讨论】:

    【解决方案2】:

    我认为你的 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
    

    【讨论】:

    • 似乎在 MySQL 服务器中,如果我放置相同的代码(由 MS Access 用括号制作)它可以工作! 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_ontasks.TaskID) .Assigned_To
    • @zaynul abadin tuhin,请添加以上内容作为答案。鉴于我的观点,我不能
    【解决方案3】:

    FROM 子句导致子任务列表与与子任务分配相关的所有客户端相乘。

    您可以从任何一张桌子开始,这取决于您。让我们保留这个员工表。然后加入下一张桌子。与员工相关的表是任务表。拿这个并加入它的员工ID。下一个要加入的表可以是 subtasks 表或 assignmentements 表。选择哪个。依此类推,始终将下一个表添加到您已有的表中。

    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 子句以提高可读性和/或性能。在没有看到你实际选择什么的情况下,这就是我能给出的所有建议。

    【讨论】:

      【解决方案4】:

      事实上你只是在使用 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 from (select .... from my_table) t1_alias

      【讨论】:

        猜你喜欢
        • 2014-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-23
        • 1970-01-01
        • 1970-01-01
        • 2014-01-17
        相关资源
        最近更新 更多