2016-04-19 7 views
0

Я хочу обновить третью таблицу «temp_table1», выполнив некоторые операции с двумя другими таблицами «temp_table» «resource1».Обновление третьей таблицы путем объединения двух таблиц

temp_table:

+-----------+ 
| temp  | 
+-----------+ 
| 0.46574 | 
+-----------+ 

resource1:

+------------------+ 
| evaluation_value | 
+------------------+ 
|   0.23  | 
|   0.56  | 
|   0.76  | 
|   0.25  | 
|   0.79  | 
+------------------+ 

temp_table1:

+-----------+ 
| temp  | 
+-----------+ 
| 0  | 
+-----------+ 

Теперь я хочу, чтобы вычесть значение Темп из "temp_table" со всеми evaluation_value от «resource1 "и сохраните вычитаемые значения, которые меньше 0,25 в" temp_table1 ", и я хочу обновить e "temp_table1" каждый раз, когда я запускаю запрос.

я построил следующий запрос для этого, но я неправильно где-то:

update temp_table1 t1 
set t1.temp = (
    select (e.evaluation_value - t.temp) < 0.25 
    from resource1 e 
    Inner join temp_table t) 

Спасибо !!!

+0

С какими значениями в temp можно начать? Похоже, вы просто хотите вставить INSERT в temp, а не в UPDATE. –

+0

Изначально параметр temp_table1 имеет значение 0. – user3304748

+0

В ваших данных примера у вас есть 3 строки в оценочном значении, которое будет меньше 0,25 после вычитания значения темпа (0,46574). Какие 3 строки в temp вы обновляете? –

ответ

0

Каждый раз, когда вы запускаете запрос, вы должны удалить существующие значения, затем заполнить новые:

TRUNCATE TABLE temp_table1 
GO 

INSERT INTO temp_table1 
SELECT 
    e.evaluation_value - t.temp 
FROM temp_table t 
    CROSS JOIN resource1 e 
WHERE (e.evaluation_value - t.temp) < 0.25 

Это потому, что UPDATE только изменяет данные в настоящее время существующих строк, и это не ваше намерение - вы хотите получать новые результаты каждый раз. Кроме того, количество строк может варьироваться в каждом прогоне, поэтому UPDATE здесь не является хорошим кандидатом.

Другая проблема связана с типом JOIN вы выбрали: INNER используется в ситуациях, где есть строгое отображение записей в одной таблице до другого (как идентификатор, который существует в обеих таблицах), и требует, чтобы указать, что сопоставление с ключевым словом ON, в то время как CROSS просто соединяет все в первой таблице со всем в другом, как вы хотите сделать (и, следовательно, сопоставление не требуется).

+0

Отлично !!! спасибо – user3304748

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