sql для обновления таблицы из другой таблицы с каждой таблицей имеет условие, не работает

#sql #db2 #sql-update #db2-400

#sql #db2 #sql-обновление #db2-400

Вопрос:

Прежде всего, я не очень хорошо разбираюсь в DB2 SQL.

У меня есть ТАБЛИЦА и ТАБЛИЦА B. ТАБЛИЦА A содержит данные последнего изменения, в то время как ТАБЛИЦА B содержит историю / запись данных из таблицы ТАБЛИЦА A.

Я хочу обновить столбец TABLEA.LAST_PRICE (с условиями DEAL_DATE = ‘1753-01-01’ и CODE <> «), заполненный TABLEB.LAST_PRICE (с условием DEAL_DATE <> ‘1753-01-01’ и CODE <> » и упорядочить по CHANGE_DATE desc limit 1), где внешний ключ для двух таблиц — TABLEA.ИДЕНТИФИКАТОР = TABLEB.ID

Я попытался обновить таблицу следующими 3 SQLL, но так и не добился успеха:

  1. update DB.TABLEA as a set a.LAST_PRICE = (select LAST_PRICE from
    DB.TABLEB as b where b.DEAL_DATE <> '1753-01-01' and a.ID = b.ID and
    b.CODE <> '' order by b.CHANGE_DATE desc FETCH FIRST 1 ROWS ONLY)
    where a.DEAL_DATE = '1753-01-01' and a.CODE <>  '' ;




2.  update DB.TABLEA as a set a.LAST_PRICE = (select LAST_PRICE from
    DB.TABLEB as b where b.DEAL_DATE <> '1753-01-01' and a.ID = b.ID and
    b.CODE <> '' order by b.CHANGE_DATE desc limit 1) where a.DEAL_DATE = '1753-01-01' and a.CODE <>  '' ;




3. update DB.TABLEA set a.LAST_PRICE = b.LAST_PRICE from DB.TABLEA  a
    join DB.TABLEB  b on a.ID = b.ID where a.DEAL_DATE = '1753-01-01'
    and a.CODE <> '' and b.DEAL_DATE <> '1753-01-01' and b.CODE <> ''
    order by b.CHANGE_DATE desc FETCH FIRST 1 ROWS ONLY;
  

Я схожу с ума от этого запроса.
Спасибо за любую помощь.

Комментарии:

1. Если TABLEA и TABLEB находятся в разных БД, вы можете обновить или вставить. Выберите только удаленную работу с DB2.

2. Пожалуйста, создайте воспроизводимый пример, включающий следующие инструкции для обеих таблиц: определение таблицы ( CREATE TABLE ), INSERT INTO инструкции с 2-3 строками для некоторого определенного идентификатора.

3. Привет, Нифриз, спасибо за ответ. TABLEA и TABLEB находятся в одной базе данных. я хочу обновить TABLEA для записи, взяв ее из TABLEB. но о трех моих sql не работает.

4. Вы получаете ошибку SQLSTATE / SQLCODE?

Ответ №1:

Похоже, что ваши даты не преобразуются должным образом. Возможно, оптимизатор преобразует ваш TABLEB DEAL_DATE в временную метку, а затем символ, который не будет соответствовать чисто символьной строке. При сравнении дат обычно лучше сравнивать их как фактические даты, а не только их представления.

 update DB.TABLEA as a set a.LAST_PRICE = (select LAST_PRICE from
    DB.TABLEB as b where cast(b.DEAL_DATE as date) <> cast('1753-01-01' as date) and a.ID = b.ID and
    b.CODE <> '' order by b.CHANGE_DATE desc FETCH FIRST 1 ROWS ONLY)
    where cast(a.DEAL_DATE as date) = cast('1753-01-01' as date) and a.CODE <>  '' ;