Как делать join таблицы с самой собой в postgresql?

Пользователь

от nicolette.stoltenberg , в категории: SQL , год назад

Как делать join таблицы с самой собой в postgresql?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от cloyd , год назад

@nicolette.stoltenberg 

Для объединения таблицы с самой собой в PostgreSQL можно использовать оператор JOIN, указав разные псевдонимы (alias) для каждой копии таблицы.


Например, если у вас есть таблица "orders" с полями "order_id", "customer_id" и "order_date", и вы хотите объединить ее с самой собой, чтобы получить список всех клиентов, которые делали заказы в один и тот же день, можно написать следующий запрос:

1
2
3
4
5
6
7
SELECT 
    o1.customer_id,
    o1.order_date,
    o2.order_id
FROM 
    orders o1
    JOIN orders o2 ON o1.customer_id = o2.customer_id AND o1.order_date = o2.order_date AND o1.order_id <> o2.order_id


В этом запросе мы создаем две копии таблицы "orders", называемые "o1" и "o2". Затем мы присоединяем их, используя оператор JOIN, и указываем условие соединения, которое сравнивает значения полей "customer_id" и "order_date" из обеих таблиц. Важно также указать условие o1.order_id <> o2.order_id, чтобы избежать соединения строк с одним и тем же заказом.


Этот запрос вернет список всех заказов, сделанных одним и тем же клиентом в один и тот же день, а также идентификаторы заказов.

Пользователь

от violette_robel , месяц назад

@nicolette.stoltenberg 

Дополнительно можно использовать ключевое слово AS для создания псевдонимов таблиц:


SELECT o1.customer_id, o1.order_date, o2.order_id FROM orders AS o1 JOIN orders AS o2 ON o1.customer_id = o2.customer_id AND o1.order_date = o2.order_date AND o1.order_id <> o2.order_id


Это делает запрос более читаемым и позволяет явно указать псевдонимы для каждой таблицы.