2013-11-14 2 views
1

Я могу получить следующий код для запуска в MS Access, который может добавить новую строку в таблицу «NodeForce».SQL Вставка с несколькими подзапросами

INSERT INTO [NodeForce] (nodeID, mem1, mem1min) 
SELECT '1113', '1752-1', [Row_ID] 
FROM [Element Forces - Frames] WHERE [FrameElem] = '1752-1' 
AND [OutputCase] = 'Case2' AND [ElemStation] = 0 

Однако, когда я добавить один дополнительный подзапрос, такие как:

INSERT INTO [NodeForce] (nodeID, mem1, mem1min, mem1max) 
SELECT '1113', '1752-1', [Row_ID] 
FROM [Element Forces - Frames] WHERE [FrameElem] = '1752-1' 
AND [OutputCase] = 'Case2' AND [ElemStation] = 0, 
[Row_ID] FROM [Element Forces - Frames] WHERE [FrameElem] = '1752-1' 
AND [OutputCase] = 'Case6' AND [ElemStation] = 12 

он выдает ошибку «Количество значений запросов и полей назначения не то же самое.»

Как вставить несколько значений с помощью разных подзапросов?

Я также попытался:

INSERT INTO ... 
VALUES ('1113', '1752-1', (SELECT ... FROM ...), (SELECT ... FROM ...)) 

, который затем дал мне ошибку говоря «входных данных запрос должен содержать, по меньшей мере, одну таблицу или запрос»

Заранее спасибо за вашу помощь!

+0

Да, ошибка правильная, где ваш второй запрос ??? после запятой у вас есть [[Row_ID] FROM' –

ответ

1

Анатомический запрос:

INSERT INTO [NodeForce] (nodeID, mem1, mem1min, mem1max) 
SELECT '1113', '1752-1', [Row_ID] 
FROM [Element Forces - Frames] WHERE [FrameElem] = '1752-1' 
AND [OutputCase] = 'Case2' AND [ElemStation] = 0 

Вы вставив 3 значения 4 столбцов, таким образом сообщения "Number of query values and destination fields are not the same."

И один ниже не имеет SELECT и после SELECT заявления с тремя значениями вместо после [Row_ID] первого заявления SELECT.

,[Row_ID] FROM [Element Forces - Frames] WHERE [FrameElem] = '1752-1' 
AND [OutputCase] = 'Case6' AND [ElemStation] = 12 

Итак, что вам нужно, чтобы соответствовать количеству столбцов с вашими значениями и в этом случае вам нужно сделать второй SELECT быть подзапрос, который является частью первого запроса и будет только возвращать значение 1, чтобы быть уверенным, как:

INSERT INTO [NodeForce] (nodeID, mem1, mem1min, mem1max) 
SELECT '1113', '1752-1', [Row_ID], (SELECT 
[Row_ID] FROM [Element Forces - Frames] WHERE [FrameElem] = '1752-1' 
AND [OutputCase] = 'Case6' AND [ElemStation] = 12 LIMIT 1) 
FROM [Element Forces - Frames] WHERE [FrameElem] = '1752-1' 
AND [OutputCase] = 'Case2' AND [ElemStation] = 0 

Где:

(SELECT 
[Row_ID] FROM [Element Forces - Frames] WHERE [FrameElem] = '1752-1' 
AND [OutputCase] = 'Case6' AND [ElemStation] = 12 LIMIT 1) 

для mem1max который является подзапросом, который возвращает только 1 значение, а - это 4-е значение, которое также соответствует вашему числу столбцов 4.

+0

Отлично, спасибо! Я знал, что у меня 4 столбца и 3 значения, я просто не знал, как правильно добавить 4-е значение. – BryanT

+0

@BryanT: Рад, что теперь он работает для вас. Счастливое кодирование и Бог благословит! – Edper

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