Если попробовать решить одну и ту же задачу двумя способами - подзапросами и джойнами, то можно обнаружить ошибку. См. скрин ниже.
При запросе подзапросами мы получаем на две записи больше, чем при запросе джойнами с нулевыми значениями - записи желтым.
Все дело в том, что не все покупатели из Customers нашлись в Orders.
Казалось бы решение в том, чтобы заменить INNER JOIN на LEFT JOIN, RIGHT JOIN или FULL JOIN в зависимости от задачи, но это не спасает ...
Ошибки
1) Думайте, когда использовать INNER JOIN, LEFT JOIN, FULL JOIN, т.е. возможны ли ситуации, когда не все покупатели имеются в таблице Orders.
2) Если решили использовать LEFT JOIN, то не использовать COUNT(*) , т.к. в этом случае будут считаться все записи объединения, не имеющие смысла. Используйте COUNT по какому-то явному столбцу, например, COUNT (ORDERID)
3) Самая опасная ошибка в том, что можно допустить ошибки при объединении. Надо внимательно относиться к тому, где применять какой JOIN.
При запросе подзапросами мы получаем на две записи больше, чем при запросе джойнами с нулевыми значениями - записи желтым.
Все дело в том, что не все покупатели из Customers нашлись в Orders.
Казалось бы решение в том, чтобы заменить INNER JOIN на LEFT JOIN, RIGHT JOIN или FULL JOIN в зависимости от задачи, но это не спасает ...
Ошибки
1) Думайте, когда использовать INNER JOIN, LEFT JOIN, FULL JOIN, т.е. возможны ли ситуации, когда не все покупатели имеются в таблице Orders.
2) Если решили использовать LEFT JOIN, то не использовать COUNT(*) , т.к. в этом случае будут считаться все записи объединения, не имеющие смысла. Используйте COUNT по какому-то явному столбцу, например, COUNT (ORDERID)
3) Самая опасная ошибка в том, что можно допустить ошибки при объединении. Надо внимательно относиться к тому, где применять какой JOIN.
No comments:
Post a Comment