#mysql #sql #subquery #union
#mysql #sql #подзапрос #объединение
Вопрос:
Я пытаюсь создать представление некоторых столбцов из 3 разных таблиц. Один из столбцов ‘OrderNumber’ находится в 2 таблицах, поэтому я пытаюсь выполнить для них ОБЪЕДИНЕНИЕ, но поскольку я сделал подзапрос, он возвращает ошибку 1242 и возвращает не более 1 строки. Я просто хочу знать, как я могу переписать этот запрос, чтобы не было подзапросов, или есть какой-то способ обойти его. Или, возможно, мне нужно написать несколько запросов? Хотя я бы предпочел сохранить его для одного запроса, спасибо.
CREATE VIEW CustOrderItems AS
SELECT CustFirstName,
CustLastName,
(SELECT OrderNumber
FROM Orders
UNION
SELECT OrderNumber
FROM Order_Details)
OrderDate,
ShipDate,
QuantityOrdered * QuotedPrice as ItemTotal
FROM Customers JOIN Orders JOIN Order_Details;
Комментарии:
1. К вашему сведению, код ошибки
1242
означает, что подзапрос возвращает более 1 строки .
Ответ №1:
Замените любой идентификатор вашего клиента
drop view if exists custorders;
create view custorders as
SELECT c.CustFirstName,
c.CustLastName,
o.OrderNumber order_ordernumber,
od.OrderNumber orderdetails_ordernumber,
o.OrderDate,
o.ShipDate,
od.QuantityOrdered * od.QuotedPrice as ItemTotal
FROM Customers c
JOIN Orders o on c.id = o.cust_id
JOIN Order_Details od on o.ordernumber = od.ordernumber
where c.id = ?
Комментарии:
1. О, извините, я новичок на этом сайте… У меня есть еще одна проблема, все еще связанная с этой темой. Код работает только тогда, когда я не включаю «СОЗДАТЬ ПРЕДСТАВЛЕНИЕ», я получаю сообщение об ошибке 1052: «Столбец «Порядковый номер» в списке полей неоднозначен». Есть идеи? Спасибо!
2. Прошу прощения, ordernumber должен быть псевдонимным.
Ответ №2:
Неясно, каковы ваши критерии объединения, потому что синтаксис оператора плохой. Но я предполагаю, что вы хотите присоединиться к OrderNumber, например SELECT … ОТ клиентов ВНУТРЕННИЕ заказы НА объединение клиентов.Порядковый номер = Заказы.OrderNumber. В этом случае, если вы хотите использовать номера заказов из двух таблиц, просто повторите запрос и выполните объединение двух, например: SELECT ,,, FROM Customers INNER JOIN Order_Details ON Customers .Порядковый номер = порядковые_детали.ОБЪЕДИНЕНИЕ ПОРЯДКОВОГО номера ВЫБИРАЕТСЯ ИЗ ВНУТРЕННИХ заказов соединения клиентов НА клиентах.Порядковый номер = Заказы.OrderNumber
Комментарии:
1. Спасибо за ваш ответ. Просто чтобы прояснить ситуацию, ‘CustFirstName’ и CustLastName’ взяты из таблицы Customers. ‘OrderNumber’ находится как в таблицах Orders, так и в таблицах Order_Details. ‘OrderDate’ и ‘ShipDate’ взяты из таблицы заказов. ‘QuantityOrdered’ и ‘QuotedPrice’ взяты из таблицы Order_Details.