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

时间:2011-12-03 00:15:00

标签: 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;

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

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

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

非常感谢。

2 个答案:

答案 0 :(得分:7)

您可以通过将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 ...

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

答案 1 :(得分:0)

是的,您只需将WHERE替换为LEFT JOIN

LEFT JOIN vw_exts ON vw_clients.client_id = vw_exts.client_id

然后,您可以从FROM部分删除这些额外的表格。