MySQL使用多个视图离开了联接

bto*_*rge 5 mysql sql database views

我有以下查询,我设计用于根据客户端数据从多个视图中编译数据.

SELECT 
  vw_clients.client_id, 
  name, 
  exts, 
  vms, 
  ivrs, 
  queues, 
  conf10, 
  conf20, 
  conf30
FROM 
  vw_clients, 
  vw_exts, 
  vw_vms, 
  vw_ivrs, 
  vw_queues, 
  vw_conf10, 
  vw_conf20, 
  vw_conf30
WHERE 
  vw_clients.client_id = vw_exts.client_id AND 
  vw_clients.client_id = vw_vms.client_id AND 
  vw_clients.client_id = vw_ivrs.client_id AND 
  vw_clients.client_id = vw_queues.client_id AND
  vw_clients.client_id = vw_conf10.client_id AND
  vw_clients.client_id = vw_conf20.client_id AND
  vw_clients.client_id = vw_conf30.client_id;
Run Code Online (Sandbox Code Playgroud)

只要每个视图中有与vw_clients中的记录相关的记录,查询就可以正常工作.但是我需要修改它以使用左连接,以便它返回来自vm_clients的所有记录,并且只返回具有这些客户端记录的其他视图中的记录.

我已经阅读了关于左连接的内容,但最多我只找到了加入一个或两个表的信息 - 但我需要加入8.我是否在vw_clients.client_id上进行左连接到所有的相应client_id字段看法?那是什么语法?

将不胜感激任何帮助.我非常接近解决这个问题,我认为这是这个难题的最后一块!

非常感谢.

cha*_*nce 8

您可以通过将vw_clients放在from列表中的第一个中来使用left join,然后在left join之后跟随所有其他表.左连接只能连接两个表或一个"结果集"和一个表,其中结果集是前一个连接的结果.

在你的情况下:

SELECT 
    T0.client_id, name, exts, vms, ivrs, queues, conf10, conf20, conf30
FROM 
    vw_clients T0
    left join  vw_exts T1 on T0.client_Id=T1.client_id
    Left join  vw_vms T2 on ...
    ...
Where ...
Run Code Online (Sandbox Code Playgroud)

也许在这里你不需要where子句.