我有以下查询,我设计用于根据客户端数据从多个视图中编译数据。
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字段所有观点?这是什么语法?
将不胜感激任何帮助。我非常接近解决这个问题,我认为这是最后一个难题!
非常感谢。
答案 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
部分删除这些额外的表格。