Как при LEFT JOIN взять значение из столбца прикрепляемое таблицы, если родительской уже есть в выборке?

LEFT JOIN, как и другие виды JOIN-ов, позволяет объединить две или более таблицы на основе значения в указанных столбцах. При этом, данные из таблицы, которая "прикрепляется" (так называемая "правая" таблица), могут быть присоединены к выборке, даже если соответствующее значение в "левой" таблице уже есть.

Чтобы взять значение из столбца "прикрепляемой" таблицы только в том случае, если соответствующее значение в "родительской" таблице отсутствует, нужно использовать конструкцию IS NULL или IS NOT NULL.

Предположим, у нас есть две таблицы:

Таблица "users":
+---------+----------+
| user_id | username |
+---------+----------+
|    1    |  John    |
|    2    |  Jane    |
|    3    |  Bob     |
+---------+----------+

Таблица "orders":
+---------+------------+------------+
| order_id| user_id    |  product   |
+---------+------------+------------+
|    1    |    1       |   Phone    |
|    2    |    2       |   Laptop   |
|    3    |    4       |   Tablet   |
+---------+------------+------------+

Мы хотим объединить таблицы "users" и "orders", чтобы получить все заказы, а также имена пользователей, при этом включая заказы, у которых нет соответствующих пользователей.

Для этого мы можем использовать следующий SQL-запрос с LEFT JOIN:

SELECT orders.order_id, users.username, orders.product
FROM orders
LEFT JOIN users ON orders.user_id = users.user_id

Результат запроса:

+---------+----------+------------+
| order_id| username |  product   |
+---------+----------+------------+
|    1    |  John    |   Phone    |
|    2    |  Jane    |   Laptop   |
|    3    |  NULL    |   Tablet   |
+---------+----------+------------+

В данном случае, заказ с order_id = 3 содержит user_id, которого нет в таблице "users". Поэтому, значение username для этого заказа равно NULL.

Чтобы включить только такие заказы, у которых значение user_id отсутствует в таблице "users", мы можем добавить условие IS NULL к выборке:

SELECT orders.order_id, users.username, orders.product
FROM orders
LEFT JOIN users ON orders.user_id = users.user_id
WHERE users.username IS NULL

Результат запроса:

+---------+----------+------------+
| order_id| username |  product   |
+---------+----------+------------+
|    3    |  NULL    |   Tablet   |
+---------+----------+------------+

Таким образом, мы получили только заказы, у которых значение user_id не имеет соответствующего значения в таблице "users", и значение username равно NULL.