Вставьте значение в таблицу, если условие выполнено хотя бы один раз - PullRequest
0 голосов
/ 25 января 2019

Я создал следующее DataModel:

enter image description here

Таблица Клиент

INSERT INTO test.customer
(CustomerName, CustomerCountry, RegistrationDate)
VALUES 
("Customer A","DE","2015-05-03"),
("Customer B","US","2015-07-25"), 
("Customer C","US","2016-02-15"), 
("Customer D","DE","2017-09-21"), 
("Customer E","AU","2018-12-07");

Таблица Заказы

INSERT INTO test.orders
(idCustomer, PaymentMethod, OrderDate)
VALUES 
("1","CreditCard","2015-05-04"),
("1","PayPal","2015-11-18"), 
("3","PayPal","2017-09-04"), 
("2","Invoice","2018-04-30");

Пока все это прекрасно работает.


Теперь я хочу заполнить таблицу SpecialCustomers значениями из таблицы Customer и Orders на основе WHERE условий.Поэтому я попробовал следующий код:

INSERT INTO test.specialcustomers
(idCustomer, CustomerName)
SELECT idCustomer, CustomerName
FROM test.customer
LEFT JOIN test.orders ON test.customer.idCustomer = test.orders.idCustomer
WHERE PaymentMethod ="PayPal";

, который вызывает ошибку:

Error Code: 1052. Column 'idCustomer' in field list is ambiguous

Насколько я вижу, проблема в том, что Customer A имеет оба порядка с Paypal и CreditCard, поэтому PaymentMethod, присвоенный Customer A, не является уникальным.

Однако моя цель - вставить каждого клиента в таблицу SpecialCustomers, как только наступит условие встречается как минимум один раз .
Следовательно, - в случае выше - если хотя бы один заказ оплачен с помощью PayPal, клиент должен быть вставлен в таблицу SpeicalCustomers.

Что мне нужно изменить в своем коде насделать эту работу?

Ответы [ 4 ]

0 голосов
/ 25 января 2019

Здесь вам просто нужно указать, какой IdCustomer вы хотите вставить, как вы сделали left join, я думаю, что это IdCustomer из таблицы customer:

INSERT INTO test.specialcustomers
 (idCustomer, CustomerName)
SELECT c.idCustomer, c.CustomerName
FROM test.customer c
 LEFT JOIN test.orders o ON tc.idCustomer = o.idCustomer
WHERE o.PaymentMethod ="PayPal";
0 голосов
/ 25 января 2019

вы должны указать полное имя в вашей вставке в столбцах и в вашем операторе выбора, если они неоднозначны. Подсказка: используйте псевдонимы в предложении from

0 голосов
/ 25 января 2019

idCustomer столбец в обеих таблицах, поэтому добавьте имя таблицы в запросе выбора.

INSERT INTO test.specialcustomers
(idCustomer, CustomerName)
SELECT test.customer.idCustomer, CustomerName
FROM test.customer
LEFT JOIN test.orders ON test.customer.idCustomer = test.orders.idCustomer
WHERE PaymentMethod ="PayPal";
0 голосов
/ 25 января 2019

Я думаю, что вы просто пропустили псевдонимы в select:

INSERT INTO test.specialcustomers (idCustomer, CustomerName)
SELECT c.idCustomer, c.CustomerName
FROM test.customer c
LEFT JOIN test.orders o
    ON c.idCustomer = o.idCustomer
WHERE o.PaymentMethod = 'PayPal';
...