2015-11-07 2 views
0

В качестве SQLite базы данных У меня есть две таблицы: «вещества» и «плотности» со столбцами «идентификаторов, имя» (для веществ таблица) и "ID, вещество, плотность" (для плотность таблица). materialid имеет внешний ключ (ссылки IDвещества таблица). substanceid является уникальным, так что есть такое же количество строк в обеих таблицах (каждая строка, соответствующая одному substanceid)SQLite запрос на обновление с двумя таблицами с внешним ключом

Я хочу обновить плотности и имя для некоторого substanceid, т.е. одна строка в каждой таблице, но немного бит с синтаксисом для обновления веществ стол.

плотности таблицы можно обновлять с:

UPDATE densities 
SET density = obj.getDensity() 
WHERE id = obj.getId(); 

Объект сос содержит (идентификатор, плотность, имя), но не substanceId.

Для веществ стол Я хотел бы написать что-то вроде:

UPDATE substances 
SET name = obj.getName() 
WHERE id = ??? 

и «???» в прозе будет:

densities.substanceid, для которых densities.i = obj.getId

Как я пишу это в SQLite?

+0

Могу ли я спросить, почему у вас нет ни одного «веществ» таблицы «плотности» является столбец? –

+0

И, кстати, быстро прочитайте действие «ON UPDATE CASCADE» и посмотрите, помогает ли оно. –

+0

Хороший вопрос, и никакого хорошего ответа. С одной стороны, у меня была одна таблица, которую я разделил, с одной стороны, чтобы немного научиться/немного поработать с внешними ключами, а также потому, что это немного смутило меня, имея вещества вместе с плотностями. К веществам также будут относиться внешние ключи к другим таблицам базы данных. – user1583209

ответ

1

Просто используйте скалярный подзапрос:

UPDATE substances 
SET name = obj.getName() 
WHERE id = (SELECT substanceid 
      FROM densities 
      WHERE i = obj.getId()); 
Смежные вопросы