Разница в MySQL JOIN против левого соединения - PullRequest
63 голосов
/ 19 марта 2012

У меня есть этот запрос к базе данных ...

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 JOIN с.Я думал, что, не указав тип соединения, предполагается, что это LEFT JOIN.Разве это не так?

Ответы [ 4 ]

167 голосов
/ 19 марта 2012

Я подумал, что, не указав тип соединения, предполагается, что это ЛЕВОЕ СОЕДИНЕНИЕ.Разве это не так?

Нет, объединение по умолчанию - ВНУТРЕННЕЕ СОЕДИНЕНИЕ.

Вот визуальное объяснение объединений SQL .

Внутреннее соединение

enter image description here

Левое соединение

enter image description here

13 голосов
/ 19 марта 2012

Нет.Если тип не указан, используется INNER JOIN.Читать о различиях; википедии

9 голосов
/ 19 марта 2012

Я считаю, что по умолчанию INNER JOIN, если вы просто укажите JOIN.

8 голосов
/ 19 марта 2012

Если вы только что упомянули 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

Надеюсь, это поможет.

...