2012-06-23 2 views
0

Я пытаюсь написать корзину покупок в заказ + orderline в базе данных sql из C# asp.net. в строке заказа будет указан номер заказа, общая стоимость, productid, количество и т. Д. Для каждого товара в корзине. Сам заказ будет содержать номер порядка в качестве первичного ключа и будет связан с различными линиями через него. Вчера все работало нормально, но теперь, когда я попытался использовать команду SELECT во вставке в оператор, чтобы получить более динамичную динамику, я получаю описанную выше синтаксическую ошибку.INSERT INTO ... SELECT синтаксическая ошибка в операторе объединения

Кто-нибудь знает, что случилось с этим утверждением:

INSERT INTO [order] 
     (klant_id,totaalprijs,btw,subtotaal,verzendkosten) 
SELECT klant.id 
,  SUM(orderregel.totaalprijs) 
,  SUM(orderregel.btw) 
,  SUM(orderregel.totaalprijs) - SUM(orderregel.btw) 
,  7.50 
FROM orderregel 
INNER JOIN 
     klant 
ON  [order].klant_id = klant.id 
WHERE klant.username = 'jerry' 
GROUP BY 
     id; 

ORDERNUMBER в таблице «порядок» на AutoNumber, в осины коде существует для каждого, который обрабатывает строки записываются для каждого продукта , есть индекс, установленный на 0 вне этого цикла и усиленный с 1 каждым его концом. Выполнение заказа выполняется только один раз в начале первого цикла, и строки добавляются после MAX (номер порядка) в качестве номера порядка.

Надеюсь, я предоставил достаточно информации, и кто-то может мне помочь. Спасибо заранее!

EDIT: спасибо всем, используя этот запрос!

INSERT INTO [заказать] (klant_id, totaalprijs, кстати, subtotaal, verzendkosten) SELECT (ВЫБОР klant.id ОТ klant ГДЕ klant.username = 'канистра'),
SUM (orderregel.totaalprijs), SUM (orderregel.btw),
SUM (orderregel.totaalprijs) - SUM (orderregel.btw), 7.50 От
orderregel;

+0

EDIT Ваш запрос не будет работать. Попробуйте вставить два заказа. Затем проверьте, если общая стоимость для вашего второго порядка является правильной. – Andomar

+0

Ммм да, я заметил, что это, видите ли вы исправить здесь? Я пытался делать это в одиночку, но в настоящее время Бюсся быть на работе весь день и программирование после получения домой не слишком хорошо для моего процесса учили;) – user1477356

+0

Вы должны были бы выяснить, как вставить связь между порядком и строкой заказа. Там и возможное решение в моем ответе. Я бы спать ночью на это :) – Andomar

ответ

3

Вы использовали [order] в JOIN, когда это должно быть orderregel Я думаю.

FROM orderregel 
    INNER JOIN klant ON [order].klant_id = klant.id 

должно быть:

FROM orderregel 
    INNER JOIN klant ON orderregel.klant_id = klant.id 

Edit:

Почему бы не только с помощью:

INSERT INTO [order] 
     (klant_id,totaalprijs,btw,subtotaal,verzendkosten) 
SELECT (SELECT klant.id FROM klant WHERE klant.username = 'jerry') 
,  SUM(orderregel.totaalprijs) 
,... 

... и избежать РЕГИСТРИРУЙТЕСЬ с klant столом?

+1

Кроме того, Theres 'GROUP BY id', без упоминания таблицы, это может привести к ООК ошибке (если есть несколько таблиц с колонкой«ID „в использовании) – poncha

+0

“ клиент»Средства клиента на голландском языке; Маловероятно, что заказ онлайн будет иметь отношение к клиенту. – Andomar

+0

@poncha - да, но ошибка была в РЕГИСТРИРУЙТЕСЬ часть на этот раз –

1

Вы не можете ссылаться на вставленную таблицу. В конце концов, эти строки еще не установлены до завершения вставки!

Чтение вашего запроса, ясно, что вы пытаетесь вставить klant под названием Jerry. Но как вы определяете, какие строки заказа используются для вставки?

Возможное решение:

  1. Написать заказ первым, с klant идентификатором
  2. Создание строки заказа. Вы знаете заказ из первого запроса (т. Е.используя select SCOPE_IDENTITY()
  3. Обновление с заказом составляет
+0

:) Спасибо за реакции, вы абсолютно правы здесь. Я читаю имя клиента из C# код позади user.authenticated встроенной функции. есть ли способ INNER JOIN клиента ON klant.username = «Джерри» я просто переместить параметр в коде за то ... – user1477356

+0

+1 для обнаружения всех проблем с запросом –

0

Попробуйте это: INSERT INTO [заказ] (klant_id, полная стоимость, налог, субтотальная, доставка) klant.id SELECT SUM (orderregel.totaalprijs) , СУММА (orderregel.btw) , СУММА (orderregel.totaalprijs) - СУММА (orderregel.btw) , 7:50 от заказа линии INNER JOIN клиента ПО orderregel.id = klant.id
INNER JOIN [заказать] ВКЛ [ заказ] = .klant_id klant.id ГДЕ klant.username = 'Jerry' GROUP BY ID;