Я использую Java DB (Java DB - поддерживаемая версия Oracle Apache Derby и содержит те же двоичные файлы, что и Apache Derby.): http://www.oracle.com/technetwork/java/javadb/overview/faqs-jsp-156714.html#1q2).Обновление таблицы с помощью нескольких соединений
Я пытаюсь обновить столбец в одной таблице, однако мне нужно присоединиться к этой таблице с двумя другими таблицами в одной базе данных, чтобы получить точные результаты (не мой дизайн и мой выбор).
Ниже приведены мои три таблицы. ADSID - это ключевое связывание Транспортных средств и Клиентов, а ADDRESS и ZIP в Salesresp используются для связи с Клиентами. (Другие поля опущены для краткости.)
Salesresp (адрес, почтовый индекс, prevsale)
Клиенты (adsid, адрес, почтовый индекс)
Транспортные средства (adsid, selldate)
Цель состоит в том, чтобы найти клиентов в таблице SalesResp, которая ранее купила транспортное средство до указанной даты. Они идентифицируются по адресу и adid в Клиентах и Vechiles соответственно.
Я видел обновления столбца с одним соединением и на самом деле задал вопрос об одном из моих собственных обновлений/соединений здесь (UPDATE with INNER JOIN). Но теперь мне нужно сделать это еще на один шаг и использовать обе таблицы для получения всей информации.
я могу получить несколько РЕГИСТРИРУЙТЕСЬ ЗЕЬЕСТ работать:
SELECT * FROM salesresp
INNER JOIN customers ON (SALESRESP.ZIP = customers.ZIPCODE) AND
(SALESRESP.ADDRESS = customers.ADDRESS)
INNER JOIN vehicles ON (Vehicles.ADSId =Customers.ADSId)
WHERE (VEHICLES.SELLDATE<'2013-09-24');
Однако я не могу получить мульти-РЕГИСТРИРУЙТЕСЬ UPDATE заявление на работу.
Я попытался попробовать обновление, как это:
UPDATE salesresp SET PREVSALE = (SELECT SALESRESP.address FROM SALESRESP
WHERE SALESRESP.address IN (SELECT customers.address FROM customers
WHERE customers.adsid IN (SELECT vehicles.adsid FROM vehicles
WHERE vehicles.SELLDATE < '2013-09-24')));
И я дал эту ошибку: «Код ошибки 30000, SQL состояние 21000: скалярный подзапрос разрешается только возвращать одну строку».
Но если я изменил этот первый «=» на «IN», это даст мне синтаксическую ошибку за столкновение «IN» (код ошибки 30000, состояние SQL 42X01).
Я также попытался сделать более вопиющие внутренние соединения, но при попытке выполнить этот код я получил ту же ошибку, что и выше: «Код ошибки 30000, состояние SQL 42X01», в котором он жаловался на мое использование «FROM», ключевое слово.
update salesresp set prevsale = vehicles.selldate
from salesresp sr
inner join vehicles v
on sr.prevsale = v.selldate
inner join customers c
on v.adsid = c.adsid
where v.selldate < '2013-09-24';
И в другой конфигурации:
update salesresp
inner join customer on salesresp.address = customer.address
inner join vehicles on customer.adsid = vehicles.ADSID
set salesresp.SELLDATE = vehicles.selldate where vehicles.selldate < '2013-09-24';
где он находит "внутренняя" неприятно: Код ошибки 30000, состояние SQL-42X01: Ошибка синтаксиса: Встречающаяся "внутренние" в строке 3, колонок 1 .
Что мне нужно сделать, чтобы получить этот запрос на множественный переход на работу? Или это просто невозможно с этой базой данных?
Любые советы приветствуются.