Я новичок здесь.
Я использую PostgreSQL для манипулирования большим количеством данных в моей конкретной области исследований. К сожалению, я столкнулся с проблемой, которая не позволяет мне продолжить анализ. Я попытался упростить свою проблему, чтобы наглядно проиллюстрировать ее.
Давайте предположим, что у меня есть таблица с названием "Покупатели" с этими данными:
table_buyers
Покупатели могут сделать только одну покупку в каждом магазине или ни одной. Есть три магазина и есть стол для каждого. Как показано ниже:
table_store1
table_store2
table_store3
Для создания таблиц я использую следующий код:
CREATE TABLE public.buyer
(
ID integer NOT NULL PRIMARY KEY,
name text NOT NULL,
phone text NOT NULL
)
WITH (
OIDS = FALSE
)
;
CREATE TABLE public.Store1
(
ID_buyer integer NOT NULL PRIMARY KEY,
total_order numeric NOT NULL,
total_itens integer NOT NULL
)
WITH (
OIDS = FALSE
)
;
CREATE TABLE public.Store2
(
ID_buyer integer NOT NULL PRIMARY KEY,
total_order numeric NOT NULL,
total_itens integer NOT NULL
)
WITH (
OIDS = FALSE
)
;
CREATE TABLE public.Store3
(
ID_buyer integer NOT NULL PRIMARY KEY,
total_order numeric NOT NULL,
total_itens integer NOT NULL
)
WITH (
OIDS = FALSE
)
;
Чтобы добавить информацию в таблицы, я использую следующий код:
INSERT INTO buyer (ID, name, phone) VALUES
(1, 'Alex', 88888888),
(2, 'Igor', 77777777),
(3, 'Mike', 66666666);
INSERT INTO Store1 (ID_buyer, total_order, total_itens) VALUES
(1, 87.45, 8),
(2, 14.00, 3),
(3, 12.40, 4);
INSERT INTO Store2 (ID_buyer, total_order, total_itens) VALUES
(1, 785.12, 7),
(2, 9874.21, 25);
INSERT INTO Store3 (ID_buyer, total_order, total_itens) VALUES
(2, 45.87, 1);
Поскольку все таблицы связаны по идентификатору покупателя, я бы хотел, чтобы у меня был запрос, который генерирует вывод, подобный этому:
желаемая таблица вывода .
Обратите внимание: если покупатель ничего не покупал в магазине, я должен вывести «0».
Я знаю, что это простая задача, но, к сожалению, мне не удалось ее выполнить.
Используя логический оператор «И», я попытался выполнить следующий код для выполнения этой задачи:
SELECT
buyer.id,
buyer.name,
store1.total_order,
store2.total_order,
store3.total_order
FROM
public.buyer,
public.store1,
public.store2,
public.store3
WHERE
buyer.id = store1.id_buyer AND
buyer.id = store2.id_buyer AND
buyer.id = store3.id_buyer;
Но, очевидно, он только что вернул «Игоря», так как это был единственный покупатель, который купил товары во всех трех магазинах ( печать экрана ).
Затем я попробовал логический оператор «ИЛИ», как и следующий код:
SELECT
buyer.id,
buyer.name,
store1.total_order,
store2.total_order,
store3.total_order
FROM
public.buyer,
public.store1,
public.store2,
public.store3
WHERE
buyer.id = store1.id_buyer OR
buyer.id = store2.id_buyer OR
buyer.id = store3.id_buyer;
Но затем он возвращает 12 строк с неправильными значениями ( печать экрана ).
Очевидно, что моя ошибка заключается в том, что я не считаю, что «Покупатели» не должны присутствовать во всех трех магазинах моего кода. Я просто не могу исправить это самостоятельно, не могли бы вы мне помочь?
Я очень благодарен за ответ, который может осветить мой путь. Большое спасибо!
Советы по поиску этой проблемы также приветствуются!