Давайте обсудим некоторые ключевые аспекты работы с джоинами в SQL, на которые стоит обратить внимание, чтобы избежать ошибок и недоразумений.
🔑 Сохранение данных в приоритете
При написании запросов с джоинами, особенно с транзитивными связями, всегда задавайте себе вопрос:
❓ Какие данные мне важно не потерять?
Выбор правильного типа джоина имеет огромное значение, потому что неверный выбор может привести к некорректным результатам. Часто бывает так:
1️⃣ Вы выбираете джоин, который кажется логичным;
2️⃣ Вы не замечаете потенциальных проблем.
Давайте рассмотрим этот момент на примере:
SELECT *
FROM problem p
JOIN page p2
ON p.page_id = p2.id
JOIN company c
ON p.company_id = c.id
На первый взгляд, этот запрос кажется корректным, и результаты выглядят нормально. Однако если внимательно проанализировать, вы увидите, что множество записей из таблицы problem просто исчезли 😱
❓ Почему так произошло?
Что, если в таблице
problem есть строки, в которых company_id = NULL? Тогда такие строки будут исключены из результата, ведь в таблице company поле id — первичный ключ и не содержит NULL.❗️ Чтобы избежать потери данных, всегда помните о выборе правильного типа джоина:
SELECT *
FROM problem p
JOIN page p2
ON p.page_id = p2.id
LEFT JOIN company c
ON p.company_id = c.id
Используя
LEFT JOIN, вы сохраните все записи из problem и соответствующие им записи из company, где problem.company_id=NULL, будут иметь пустые значения.Помните об этом важном аспекте при работе с джоинами, чтобы получать точные и полные результаты! И ставьте 🔥, если было полезно!
📈 Симулейтив | 📱 ВК | 📱 YouTube | 📱 Канал о DS