2015-10-16 2 views
1

Хорошо, поэтому я потратил часы, пытаясь понять это, и я собираюсь сойти с ума! У меня есть серия таблиц, содержащих данные о продажах, из которых некоторые поля должны выводиться на веб-страницу с использованием C#. У меня очень много построена программа. Я просто не могу понять правильную строку SQL Query, чтобы использовать для построения правильного набора данных, чтобы получить то, что мне нужно.Нужна помощь в поиске правильной строки SQL Query

This is my ERD structure

Из того, что я играл с в течение большей части дня, я обнаружил, что в основном мне нужен набор данных вещей из таблицы LineItem, плюс «Описание», «UnitWeight» , «UnitPrice» из таблицы Inventory; «Компания» и «addrBilling» из таблицы «Клиент»; и «OrderDate» из таблицы «Счет».

Одна из строк, которые я попробовал, - это небольшое тестирование, чтобы узнать, могу ли я получить все поля, которые я хотел получить только из одного из значений InvoiceNum. Не повезло. На выходе отображаются только кратные все мои данные.

SELECT * 
FROM customer JOIN lineitem JOIN inventory 
WHERE lineitem.InvoiceNum = 2002; 

Этот запрос был создан из MS Access (который я должен использовать, к сожалению). Доступ просто дает мне «Тип несоответствия в выражении». Посмотрел, что и нашел, что он может делать с типами данных, но я проверил все, и любые соответствующие поля (например, два SKU) имеют одинаковые типы данных.

SELECT LineItem.*, 
    Customer.Company, 
    Customer.addrBilling, 
    Inventory.Description, 
    Inventory.UnitWeight, 
    Inventory.UnitPrice, 
    Invoice.OrderDate, 
    * 
FROM (Customer INNER JOIN Invoice ON Customer.custNumber = Invoice.custNumber) 
    INNER JOIN 
    (Inventory INNER JOIN LineItem ON Inventory.SKU = LineItem.SKU) 
     ON Invoice.InvoiceNumber = LineItem.InvoiceNumber; 

И еще бесчисленное множество, у которых все провалилось.

Надеюсь, какой-то незнакомец может установить меня по правильному пути.

Спасибо всем за любые советы.

+0

В вашей структуре ERD нет никаких указаний. как мы можем узнать, что является одной стороной отношений, а какая - много? –

+0

это sql или ms-access –

+0

как вы подключаете инвентарь к клиенту или счет-фактуру? соединение отсутствует в этом сценарии –

ответ

1

Вы можете попробовать это:

SELECT LineItem.*, 
    Customer.Company, Customer.addrBilling, 
    Inventory.Description, Inventory.UnitWeight, Inventory.UnitPrice, Invoice.OrderDate 
FROM ((Customer 
INNER JOIN Invoice ON Customer.custNumber = Invoice.custNumber) 
INNER JOIN LineItem ON Invoice.InvoiceNumber = LineItem.InvoiceNumber) 
INNER JOIN Inventory Invoice.ItemId=Inventory.Id 

В C#, вы можете обернуть это в многострочного строкового литерала:

var sql = @" 
    SELECT LineItem.*, 
     Customer.Company, Customer.addrBilling, ... 
"; 

Вы должны изучить INNER JOIN

+0

Поскольку вопрос OP полностью связан с синтаксисом SQL, тогда ответ также должен быть чистым SQL (нет конкатенации строк C#). По крайней мере, поскольку OP указал, что этот оператор SQL используется из C#, используйте многострочный строковый литерал. –

+0

Вопрос помечен как C#, поэтому –

+0

Должно ли это быть? В этом вопросе нет ничего особенного, это C#; нет даже кода, связанного с C#. –

-2

ооочень .... Я идиот. Похоже, я делал это намного сложнее, чем нужно. И, как оказалось, моя первая попытка была в значительной степени правильной, я просто отказался от некоторых вещей и неправильно сделал приказ.

Оказывается, мой ответ был:

SELECT * FROM Customer NATURAL JOIN Invoice NATURAL JOIN lineitem NATURAL JOIN inventory; 

Ницца и легко сделать свой набор данных, который содержит уникальные наборы для каждого LineItem. Что я могу прочитать на своей странице.

Приношу свои извинения за то, что вы потеряли время. Спасибо за помощь!

+1

Access SQL не понимает' NATURAL JOIN': «Синтаксическая ошибка в предложении FROM». –

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