DB2 присоединяется к трудностям

У меня следующая ситуация (упрощенно):

2 таблицы BiTemp

  • basicdata (id, btmp_tsd, name, prename)
  • расширенные данные (id, btmp_tsd, basicid, кодовое имя, кодовое значение)

В расширенных данных могут быть многократные записи для одних базовых данных с разными кодовым именем и значением.

Я должен создать SQL, чтобы выбрать все строки, которые изменились с указанного времени. Для таблицы базовых данных это относительно просто:

SELECT ID, BTMP_TSD, NAME, PRENAME
FROM BASICDATA BD
WHERE BTMP_TSD  =
               (SELECT MAX(BTMP_TSD)
                  FROM BASICDATA BD2
                 WHERE BD2.ID             =  BD.PRTNR_ID
                   AND BD2.BTMP_TSD      >  :MINTSD
                   AND BD2.BTMP_TSD      <= :MAXTSD
               )
ORDER BY ID
WITH UR

Теперь мне нужно присоединиться ко второй таблице, чтобы получить кодовое значение для кодового имени 'test'. Проблема в том, что она может не существовать, в этом случае строка должна быть собрана в любом случае. Но если есть ряд, но не в пределах временного диапазона, я не должен получить результат.

Я надеюсь, что смог объяснить мою проблему. Соединения - это одна из вещей, которую я до сих пор не вижу...

Изменить: Хорошо, вот образец

basicdata:
id,btmp_tsd,name,prename
1,2013-05-25,test,user
2,2013-06-26,user,two
3,2013-06-26,peter,hans
1,2013-06-20,test,us3r
2,2013-10-30,us3r,two

extendeddata:
id,btmp_tsd,basicid,codename,codevalue
1,2013-05-25,1,superadmin,1
2,2013-06-26,3,admin,1
3,2013-11-25,1,superadmin,0

Хорошо, теперь есть эти записи, и я хочу, чтобы все идентификаторы пользователей, которые имели какие-либо изменения с 2013-10-01, я должен получить

User1 (потому что в расширенном суперпредставлении данных произошли изменения)

Пользователь2 (было изменение имени, и я хочу, чтобы он даже жестко не имел записи в таблице расширенных данных)

не User3 (у него есть записи в обеих таблицах, но он не находится в указанном диапазоне)

1 ответ

Следующий запрос должен делать то, что вы хотите.

select * 
from basicdata b left outer join extendeddata e on b.id=e.basicid
where b.btmp_tsd >= '2013-10-01'
  or e.btmp_tsd >= '2013-10-01'

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я не тестировал SQL. Так что синтаксис не может быть на 100% идеальным.

Другие вопросы по тегам