2016-10-01 2 views
0

Я пытаюсь создать представление некоторых столбцов из трех разных таблиц. Один из столбцов «OrderNumber» находится в двух таблицах, поэтому я пытаюсь сделать UNION для них, но поскольку я сделал подзапрос, он возвращает ошибку 1242 и не вернет более 1 строки. Я просто хочу знать, как я могу переписать этот запрос так, чтобы не было подзапросов, или каким-то образом его можно обойти. Или, возможно, мне нужно написать несколько запросов? Хотя я бы предпочел сохранить его в одном запросе, спасибо.Код ошибки MySQL 1242

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; 
+0

FYI, код ошибки '1242' означает ** подзапрос возвращает более чем на 1 строку **. –

ответ

0

заменителя независимо от вашего идентификатора клиента

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 = ? 
+0

Это сработало ^.^Большое вам спасибо – denkie

+0

Вы хотите принять ответ? Спасибо –

+0

О, извините, я новичок в этом сайте ... У меня есть еще одна проблема, которая по-прежнему связана с этой темой. Код работает только тогда, когда я не включаю «CREATE VIEW», я получаю ошибку 1052, «Колонка« OrderNumber »в списке полей неоднозначна». Есть идеи? Благодаря! – denkie

0

Неясно, каковы ваши критерии присоединения, потому что синтаксис инструкций является плохим. Но я предполагаю, что вы хотите присоединиться к OrderNumber, например SELECT ... FROM Customers INNER JOIN Заказы на клиентов. Номер_ордера = Orders.OrderNumber. В этом случае, если вы хотите использовать номера заказов из двух таблиц, просто повторите запрос и сделайте объединение двух таких: SELECT ,,, FROM Customers INNER JOIN Order_Details ON Customers.OrderNumber = Order_Details.OrderNumber UNION ВЫБЕРИТЕ ИЗ клиентов INNER JOIN Заказы ON Customers.OrderNumber = Orders.OrderNumber

+0

Спасибо за ваш ответ. Просто, чтобы прояснить ситуацию, «CustFirstName» и «CustLastName» находятся в таблице Customers. «OrderNumber» - из таблиц Orders и Order_Details. «OrderDate» и «ShipDate» взяты из таблицы «Заказы». «QuantityOrdered» и «QuotedPrice» взяты из таблицы Order_Details. – denkie