SQL - запрос (sqlite)

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
amer
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 02.08.2003 (Сб) 19:41
Откуда: Воронеж

SQL - запрос (sqlite)

Сообщение amer » 04.07.2015 (Сб) 9:46

блин... Помогите плз
две одинаковых таблицы: таблица1 (поле1, поле2) и таблица2 (поле1, поле2)
нужно: отобрать из таблица2 все записи, где таблица2.поле1=таблицы1.поле1 таблицы1 и заменить значения таблица1.поле2 соответствующими из таблица2.поле2
всю голову сломал :(

вот так:
Код: Выделить всё
    Con.Execute "Update tOld SET " & field & " = (select n." & field & " from tNew n where Nummer = n.Nummer)"


вставляет во все записи одно и тоже

вот так:
Код: Выделить всё
    CreateTemp
    Con.Execute "insert into Temp select * from tNew"
    Con.Execute "Update tOld SET " & field & " = (select n." & field & " from Temp n where Nummer = n.Num)"

здесь я сделал точно такую же таблицу но изменил название поля
в итоге - входит в какой-то цикл и не собирается из него выходить

вот так:
Код: Выделить всё
Con.Execute "replace into tOld (" & field & ")" & _
                "select n." & field & " from tNew n join tOld o on n.Nummer = o.Nummer"

все хорошо, только ничего не изменяет :(

может у кого есть мысли какие-нибудь по этому поводу?

пока справился с помощью временной таблицы:

Код: Выделить всё
        CreateTbl "Temp"
            t = "tOld.Nummer , tOld.Bezeichnung , tNew.Preis , tOld.RG , " & _
               "tOld.EK , tOld.Gewicht , tOld.MVP , tOld.Ersatzt , tOld.Pfand , " & _
               "tOld.Lange , tOld.Hohe , tOld.Breite , tOld.Zusatz , tOld.Datum"

        Con.Execute "Insert Into Temp select " & t & " from tOld, tNew Where tOld.Nummer = tNew.Nummer"
        Con.Execute "DELETE FROM tOld WHERE Nummer IN (SELECT Nummer FROM tNew)"
        Con.Execute "Insert Into tOld select * from Temp"

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Re: SQL - запрос (sqlite)

Сообщение HandKot » 06.07.2015 (Пн) 8:14

amer писал(а):блин... Помогите плз
две одинаковых таблицы: таблица1 (поле1, поле2) и таблица2 (поле1, поле2)
нужно: отобрать из таблица2 все записи, где таблица2.поле1=таблицы1.поле1 таблицы1 и заменить значения таблица1.поле2 соответствующими из таблица2.поле2
всю голову сломал :(

вот так:
Код: Выделить всё
    Con.Execute "Update tOld SET " & field & " = (select n." & field & " from tNew n where Nummer = n.Nummer)"


вставляет во все записи одно и тоже




Код: Выделить всё
update table1 set
  field2 = (select n.field2 from table2 n where n.field1 = table1.field1);

не забывайте про алиасы
I Have Nine Lives You Have One Only
THINK!

amer
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 02.08.2003 (Сб) 19:41
Откуда: Воронеж

Re: SQL - запрос (sqlite)

Сообщение amer » 06.07.2015 (Пн) 9:00

спасибо, конечно, но нет :(
висит

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Re: SQL - запрос (sqlite)

Сообщение HandKot » 06.07.2015 (Пн) 13:03

amer писал(а):спасибо, конечно, но нет :(
висит

а записей в таблицах сколько?
I Have Nine Lives You Have One Only
THINK!

amer
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 02.08.2003 (Сб) 19:41
Откуда: Воронеж

Re: SQL - запрос (sqlite)

Сообщение amer » 06.07.2015 (Пн) 13:17

пока для экспериментов приблизительно 108 000, в работе могут быть таблицы по 800 тыс записей
в варианте через temp-таблицу делается за 8 секунд вместе с сохранением на диск

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 06.07.2015 (Пн) 13:33

Неужели sqlite никак не позволяет join запихнуть в update?

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Re:

Сообщение HandKot » 06.07.2015 (Пн) 13:38

Qwertiy писал(а):Неужели sqlite никак не позволяет join запихнуть в update?

неа, сам в шоке :shock:
I Have Nine Lives You Have One Only
THINK!

amer
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 02.08.2003 (Сб) 19:41
Откуда: Воронеж

Re: SQL - запрос (sqlite)

Сообщение amer » 06.07.2015 (Пн) 14:32

вот и я в шоке :?

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Re: SQL - запрос (sqlite)

Сообщение HandKot » 07.07.2015 (Вт) 8:02

amer писал(а):вот так:
Код: Выделить всё
Con.Execute "replace into tOld (" & field & ")" & _
                "select n." & field & " from tNew n join tOld o on n.Nummer = o.Nummer"

все хорошо, только ничего не изменяет :(


чтобы меняло, необходимо наличие ключей на таблицах

Код: Выделить всё
create table t1(f1 int primary key, f2 int);
create table t2(f1 int primary key, f2 int);

insert or replace into t1(f1, f2)
select
  t1.f1
  , t2.f2
from
  t1
join t2 on t2.f1 = t1.f1;


вот тут тренировался SQL fiddle
I Have Nine Lives You Have One Only
THINK!


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 138

    TopList  
cron