Код ошибки MySQL 1242

#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.