【问题标题】:MySQL left join with multiple viewsMySQL左连接有多个视图
【发布时间】:2012-01-11 22:52:54
【问题描述】:

我有以下查询,我设计该查询是为了根据客户端数据编译来自多个视图的数据。

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 字段进行左连接所有的意见?它的语法是什么?

如果有任何帮助,我们将不胜感激。我非常接近解决这个问题,我认为这是最后一块拼图!

非常感谢。

【问题讨论】:

  • 您正在使用隐式连接——您可能希望改用显式连接(即... left join on <condition> ...)。

标签: mysql sql database views


【解决方案1】:

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

在你的情况下:

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 子句。

【讨论】:

  • 如此简单!非常感谢,有了最后一条信息,我就可以进行查询了。我按照建议完全删除了 WHERE 子句,它很有效。
【解决方案2】:

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

LEFT JOIN vw_exts ON vw_clients.client_id = vw_exts.client_id

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

【讨论】:

    猜你喜欢
    • 2010-12-31
    • 2022-07-30
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多