2016-12-08 2 views
2

Доброе утро, я в настоящее время делаю домашнее задание, и мне нужно включить поле customerID в мою таблицу через заказы. Вот мой SQLSQL множественные внутренние базы объединений

SELECT 
    northwinds.orders.customerid, northwinds.orderdetails.orderid, 
    northwinds.products.productname, northwinds.orderdetails.unitprice,  
    northwinds.orderdetails.quantity, 
    northwinds.orderdetails.unitprice * northwinds.orderdetails.quantity AS TotalCost 
FROM 
    northwinds.orderdetails 
JOIN 
    northwinds.products ON northwinds.orderdetails.productid = northwinds.products.productid 
FROM 
    northwinds.orderdetails 
JOIN 
    northwinds.orders ON northwinds.orderdetails.orderid = northwinds.orders.orderid 

Я думаю, что я почти получил это право, но он говорит:

ОШИБКА в строке 4: ORA-00933: команды SQL не правильно закончился

Может

кто-то помогите мне, что мне делать?

+0

слишком много 'From's, может быть только один, смотрите в ваших текстах снова в правильной структуре Select запроса –

+2

Вы два предложения 'FROM'. Удалите второй 'FROM northwinds.orderdetails' – Siyual

+0

@Siyual - Это вызовет новые проблемы. Второй блок 'FROM' не является копией и вставкой первого, он ссылается на другую таблицу. *** Просто *** удаление этого блока 'FROM' вызовет синтаксические ошибки в блоке' SELECT'; ссылаясь на таблицу, которая больше не упоминается в соединениях. – MatBailie

ответ

1

Ваш запрос имеет 2 из положений

SELECT northwinds.orders.customerid, northwinds.orderdetails.orderid, 
    northwinds.products.productname, northwinds.orderdetails.unitprice, 
    northwinds.orderdetails.quantity, northwinds.orderdetails.unitprice * northwinds.orderdetails.quantity AS TotalCost 
FROM northwinds.orderdetails JOIN northwinds.products 
    ON northwinds.orderdetails.productid=northwinds.products.productid 
FROM northwinds.orderdetails JOIN northwinds.orders 
ON northwinds.orderdetails.orderid= northwinds.orders.orderid; 

EDIT

Удалить вторую из заявления и тест снова. Обратите внимание, без схемы я не знаю, если это результирующий запрос приведет к успеху:

SELECT northwinds.orders.customerid, northwinds.orderdetails.orderid, 
    northwinds.products.productname, northwinds.orderdetails.unitprice, 
    northwinds.orderdetails.quantity, northwinds.orderdetails.unitprice * northwinds.orderdetails.quantity AS TotalCost 
FROM northwinds.orderdetails 
JOIN northwinds.products 
    ON northwinds.orderdetails.productid=northwinds.products.productid 
JOIN northwinds.orders 
    ON northwinds.orderdetails.orderid= northwinds.orders.orderid; 
+0

Это действительно синтаксическая ошибка. Но этот «ответ» не подсказывает, как это исправить. Второе предложение 'FROM' - это, очевидно, попытка присоединиться к« заказам »к существующим объединениям между« orderdetails »и« products ». Чтобы это было * ответом *, а не * комментарием *, он должен указать ***, как *** на *** правильно *** присоединиться к этой третьей таблице к предыдущим двум. – MatBailie

+0

Я подтвердил ответ. Он решает указанную проблему. Кроме того, StackOverflow не является форумом для подачи ложки. –

+0

@ DanBracuk - Нет, он не отвечает на вопрос. Он не предлагает, что делать.Он * подразумевает * удаление второго блока 'FROM', что приведет к синтаксическим ошибкам в блоке' SELECT' * (ссылка на таблицу, не упомянутую в объединениях) *. И если намерение состоит в том, чтобы заменить второй блок 'FROM' на второй' JOIN', тогда ***, это должно сказать, что ***. Это только наблюдение, а не решение или ответ. Таким образом, это не более чем комментарий. – MatBailie

2

Кроме двух FROM также использовать таблицу псевдонимов, чтобы сделать его легко читать

SELECT o.customerid, 
     od.orderid, 
     pr.productname, 
     od.unitprice,  
     od.quantity, 
     od.unitprice * od.quantity AS TotalCost 
FROM northwinds.orderdetails as od 
JOIN northwinds.products as pr 
    ON od.productid = pr.productid 
JOIN northwinds.orders as o 
    ON od.orderid = o.orderid 
3

Как уже упоминалось у вас есть два оператора from. Но, пожалуйста, подумайте также об использовании псевдонимов и кода форматирования. Это позволяет легче заметить проблемы. Ваш запрос должен выглядеть следующим образом:

SELECT o.customerid 
    , od.orderid 
    , p.productname 
    , od.unitprice 
    , od.quantity 
    , od.unitprice * od.quantity AS TotalCost 
FROM northwinds.orderdetails od 
    INNER JOIN northwinds.products p ON od.productid = p.productid 
FROM northwinds.orderdetails od 
    INNER JOIN northwinds.orders o ON od.orderid = o.orderid; 

С таким форматом будет легче заметить двойной от и изменить его к окончательной и правильной версии:

SELECT o.customerid 
    , od.orderid 
    , p.productname 
    , od.unitprice 
    , od.quantity 
    , od.unitprice * od.quantity AS TotalCost 
FROM northwinds.orderdetails od 
    INNER JOIN northwinds.products p ON od.productid = p.productid 
    INNER JOIN northwinds.orders o ON od.orderid = o.orderid; 
1

ваш запрос не может иметь более чем один «от» в этом. Я немного изменил его и использовал некоторые псевдонимы, чтобы сделать запрос короче и с моей точки зрения более читаемым.

SELECT ord.customerid, northwinds.orderdetails.orderid, 
     prod.productname, od.unitprice, od.quantity, 
     od.unitprice*od.quantity AS TotalCost 
FROM northwinds.orderdetails od 
JOIN northwinds.products  prod ON od.productid = prod.productid 
JOIN northwinds.orders  ord ON od.orderid = ord.orderid 

Надежда, что помогает, позаботьтесь

Andreas

+0

использовать 'control-k' для форматирования в качестве кода или добавить 4 пробела –

+0

Спасибо за вашу помощь. Я делаю свои первые ответы и должен привыкнуть к Markdown. –

Смежные вопросы