2014-12-01 3 views
0

SQL (МГЭ) Newb здесь,ссылки несколько таблиц SQLite, где положение

У меня есть sqlite3 БД с двумя таблицами в ней, давайте назовем их TABLE_A и TABLE_B. TABLE_A имеет 3,6 млрд попарные оценки в формате:

mol_a,mol_b,score 
int, int, real 
int, int, real 
... 

Я добавил две пустые столбцы TABLE_A: year_a и year_b, которые я хочу popluate с данными TABLE_B.

Таблица B состоит из mol_id-х и лет в формате

mol_id,year 
int,int 
int,int 
... 

, где mol_id соответствует возможных идентификаторов в mol_a TABLE_A и mol_b полей.

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

Это то, что я пытаюсь:

INSERT INTO table_a.year_a 
SELECT year 
FROM table_b 
WHERE table_b.mol_id = table_a.mol_a; 

, но казалось бы мой синтаксис table.column не так?

Я уверен, что есть простой ответ, но я не могу найти его.

Спасибо за любую помощь

+0

Это вопрос двусмысленности? Вам нужно сказать «SELECT table_b.year» вместо этого? – AdamMc331

+0

еще получить сообщение об ошибке: нет такой столбец: table_a.mol_a –

+0

Ну, * делает * столбец существует? Я не вижу другой причины, по которой вы не получите такую ​​ошибку столбца. – AdamMc331

ответ

1

Из того, что вы описали, вы хотите, чтобы update, не insert:

update table_a 
    set year = (select b.year from table_b b where b.mol_id = table_a.mol_a); 
+0

hmm this throws an: 'code' Ошибка: из-за ошибки' code' –

+0

я должен добавить, что у меня не было памяти, она жевала около 1 ГБ и ошибки –

+0

Затем попробуйте разделить обновления; добавьте что-то вроде 'WHERE rowid BETWEEN 1000000 AND 1999999' к внешнему запросу. –

0

Вы уверены, что вы не хотите, обновление вместо этого, то есть, чтобы заполнить новый столбцы существующих строк? В этом случае:

UPDATE table_a 
SET year_a = (SELECT year 
       FROM table_b 
       WHERE table_b.mol_id = table_a.mol_a), 
    year_b = (SELECT year 
       FROM table_b 
       WHERE table_b.mol_id = table_a.mol_b), 
+0

То же, что и с аналогичным решением Gordon Linoff, он использует около 1 ГБ ОЗУ, а затем ошибки с «из памяти» –

0

Попробуйте 1

INSERT INTO tanimoto (year_a) 
SELECT year FROM date_ids table_b 
WHERE table_b.mol_id = table_a.mol_a; 

Попробуйте 2

INSERT INTO tanimoto (year_a) 
SELECT year FROM date_ids table_b 
WHERE Exists (Select 1 From tanimoto table_a Where table_a.mol_id = table_b.mol_a; 

Здесь я немного неудобно, что я не могу в полной мере понять, что вы пытаетесь сделать. Я вижу, что многие ответы otehr упоминают, что вы можете wnat и обновить. Я читаю, что вы хотите добавить новую строку в tanimoto с годом с даты, где вы получите матч через mol. Если это не так, тогда yuo может попытаться взглянуть на некоторые из ответов на обновления.

+0

все еще получают ошибку: нет такого столбца: table_a.mol_a –

+0

@CameronPye вы можете вставить здесь ошибку, которую вы получаете ? – asantaballa

+0

sqlite> INSERT INTO tanimoto (year_a) ВЫБЕРИТЕ год FROM date_ids WHERE date_ids.mol_id = ta nimoto.mol_a; Ошибка: нет такой колонки: tanimoto.mol_a –

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