2012-03-06 3 views
0

Это должна быть простая проблема, но я не могу найти точное решение. Это в основном то, что у меня есть:Объедините две таблицы MySQL в одну (плюс арифметику)

table_1:

id* scenario* val1  val2 
--- --------  ----- ------ 
AC1 1   2  0 
AC2 1   1  0 
AC1 2   4  0 
AC2 2   3  0 

table_2:

id*  val3 
---  ------ 
AC1  4 
AC2  6 

Все, что я хочу сделать, это обновление val2 из table_1, где сценария = 1 со значениями из table_2 с соответствующим идентификатором но я хочу, чтобы он был равен val1 + val3 (я не знаю, как сделать это менее запутанным). Таким образом, для этого примера я хочу table_1 стать:

id* scenario* val1  val2 
--- --------  ------ -------- 
AC1 1   2  6 
AC2 1   1  7 
AC1 2   4  0 
AC2 2   3  0 

Я думаю, что это можно сделать с помощью простого заявления MySQL, но я не знаю, как построить его с условием для первой таблицы ("INSERT INTO table_1 WHERE = 1 SELECT ... "??) и арифметика двух столбцов из двух разных таблиц.

ответ

1

Попробуйте это:

UPDATE table_1 
SET val2 = val1 + 
    (SELECT val3 FROM table_2 
    WHERE id = table_1.id 
    LIMIT 0,1) 
WHERE scenario = 1 
+0

Спасибо Марко! что работало отлично и легко следовать. –

+0

@JohnSmith: рад помочь вам :) – Marco

0

Попробуйте это:

UPDATE table_1 a join table_2 b on a.id = b.id 
set a.val2 = a.val1 + b.val3 
where a.scenario = 1 
+0

Я думаю, что это не работает: вы попробовали? – Marco

+0

thnx для указания того, что я тестировал его на сервере sql и не заметил, что вопрос для mysql. –

0

Попробуйте этот запрос -

UPDATE table_1 t1 
    JOIN table_2 t2 
    ON t1.id = t2.id 
    SET t1.val2 = t1.val1 + t2.val3 
WHERE t1.scenario = 1 
1

Я предполагаю, что вы будете жестко закодировать значение сценария, потому что в противном случае нет способ связать данные таблицы_2 с сценарием table_1.

Так что я хотел бы сделать что-то вроде:

UPDATE table_1 set val2 = val1 + (select val3 from FROM table_2 WHERE table_2.id = table_1.id) 
WHERE scenario = 1 
2

Довольно прямо вперед, и читаемым РЕГИСТРИРУЙТЕСЬ будет делать это;

UPDATE table_1 t1 
JOIN table_2 t2 ON t1.id = t2.id 
SET t1.val2 = t1.val1 + t2.val3 
WHERE scenario = 1; 

Демонстрация here.

+0

Спасибо за быстрый ответ! SQL Fiddle выглядит очень полезным инструментом, который помогает мне понять логику. –

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