【问题标题】:Difference in MySQL JOIN vs LEFT JOINMySQL JOIN 与 LEFT JOIN 的区别
【发布时间】:2012-04-03 22:47:54
【问题描述】:

我有这个跨数据库查询...

SELECT
            `DM_Server`.`Jobs`.*,
            `DM_Server`.servers.Description AS server,
            digital_inventory.params,
            products.products_id,
            products.products_pdfupload,
            customers.customers_firstname,
            customers.customers_lastname
        FROM `DM_Server`.`Jobs`
        INNER JOIN `DM_Server`.servers ON servers.ServerID = Jobs.Jobs_ServerID
        JOIN `cpod_live`.`digital_inventory` ON digital_inventory.jobname = Jobs.Jobs_Name
        JOIN `cpod_live`.`products` ON products.products_pdfupload = CONCAT(digital_inventory.jobname, ".pdf")
        JOIN `cpod_live`.`customers` ON customers.customers_id = products.cID
        ORDER BY `DM_Server`.`Jobs`.Jobs_StartTime DESC LIMIT 50

在我制作它们 LEFT JOINs 之前它运行良好。我认为通过不指定连接类型,它被假定为LEFT JOIN。不是这样吗?

【问题讨论】:

    标签: mysql query-optimization left-join inner-join


    【解决方案1】:

    我认为通过不指定连接类型,它被假定为 LEFT JOIN。不是这样吗?

    不,默认联接是 INNER JOIN。

    这里是a visual explanation of SQL joins

    内连接

    左加入

    【讨论】:

    • 通过跨数据库,TS 可能意味着他的查询使用了来自多个数据库的表。
    • LEFT JOININNER JOIN 慢得多有很大原因吗?
    • @Webnet:它可能会返回更多行。在某些情况下,这可能会导致它变慢。
    【解决方案2】:

    没有。如果未指定类型,则使用 INNER JOIN。阅读差异; wikipedia

    【讨论】:

      【解决方案3】:

      如果你只指定JOIN,我相信默认是INNER JOIN

      【讨论】:

        【解决方案4】:

        如果你刚刚在查询中提到了 JOIN,默认情况下会被考虑 作为 INNER JOIN。

        左连接:左连接将取左表中的所有元素,只匹配右表中的记录,如下所示。 示例:

        SELECT column_name(s)
        FROM table_name1 #(Left table)
        LEFT JOIN table_name2 #(Right table)
        ON table_name1.column_name=table_name2.column_name
        

        希望这会有所帮助。

        【讨论】:

          猜你喜欢
          • 2011-10-13
          • 2014-03-11
          • 1970-01-01
          • 2019-09-03
          • 1970-01-01
          • 2011-03-12
          • 2020-03-07
          相关资源
          最近更新 更多