2016-11-17 5 views
0

У меня есть две таблицыINSERT INTO на основе ИНЕКЕ второй таблицы

table1 
+--------+-----+------+ 
| DATE | VAR| VAL| 
+--------+-----+------+ 
|20160101|VAR_1| 0.4| 
|20160101|VAR_2| 0.1| 
|20160102|VAR_1| 0.6| 
|20160102|VAR_2| 0.1| 
|20160103|VAR_1| 0.5| 
|20160103|VAR_2| 0.1| 
+--------+-----+------+ 

table 2 
+--------+-----+------+ 
| DATE | VAR| VAL| 
+--------+-----+------+ 
|20160102|VAR_1| 0.6| 
|20160102|VAR_2| 0.1| 
|20160103|VAR_1| 0.5| 
|20160103|VAR_2| 0.1| 
|20160104|VAR_1| 0.3| 
|20160104|VAR_2| 0.2| 
|20160105|VAR_1| 0.2| 
|20160105|VAR_2| 0.6| 
|20160106|VAR_1| 0.3| 
|20160106|VAR_2| 0.4| 
+--------+-----+------+ 

То, что я хочу сделать, это добавить все новые записи на table2 в table1 на основе даты. Моя идея была такой:

INSERT INTO table1 SELECT * FROM table2 WHERE date > (SELECT MAX(date) from table1); 

но я получаю синтаксическую ошибку. С НЕ работает ...

INSERT INTO table1 SELECT * FROM table2 WHERE table2.date NOT IN(SELECT DISTINCT date from table1); 

Любая помощь высоко ценится!

+0

Имеет ли значение, что у вас есть table2.data во второй, но не первый? Вы получили какие-либо детали в ошибке? Изменить: удалить вставку и выполнить только выбор. Посмотрите, что вы получаете. – johnny

+0

Работает в Postgres. Пожалуйста, отредактируйте свое сообщение, чтобы прикрепить сообщение об ошибке для первой инструкции вставки. Кроме того, вы сохраняете свои даты в столбце varchar? Если это так, подумайте о переключении на соответствующий тип данных. –

+0

Не могли бы вы предоставить сообщение об ошибке, которую вы получаете. –

ответ

1

Вот способ попробовать это, я использовал date1 вместо даты

select t2.* from table2 t2, (SELECT MAX(date1) date1 FROM table1) t1 where t2.date1 > t1.date1; 
+0

Works отлично, спасибо! – CKre

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