SQL Присоединиться с> = или между логикой - PullRequest
0 голосов
/ 31 января 2020

У меня есть две таблицы, которые выглядят следующим образом.

Таблица 1:

video_ref_raw_media_id | start_seconds | end_seconds | step
ABC001                 | 0:00          | 0:30        | 1
ABC001                 | 0:31          | 1:30        | 2
ABC001                 | 1:31          | 2:30        | 3
ABC002                 | 0:00          | 0:35        | 1
ABC002                 | 0:36          | 1:46        | 2
ABC002                 | 1:47          | 2:44        | 3

Таблица 2:

video_ref_raw_media_id | start_seconds | end_seconds | label
ABC001                 | 0:10          | 0:11        | green
ABC001                 | 0:15          | 0:16        | black
ABC001                 | 1:45          | 1:46        | green
ABC002                 | 0:20          | 0:21        | red

Я хочу присоединить таблицу 1 к таблице 2 основаны на 1 video_ref_raw_media_id и 2 основаны на шаге в таблице 1. Единственный способ сделать это, если метка, которая была применена в таблице 2, произошла во временном интервале шага в таблице 1 (между start_seconds и end_seconds) , Надеюсь, в этом есть какой-то смысл.

Я думаю, sql будет выглядеть примерно так:

Select * from 
"Table 1"
LEFT JOIN "Table 2" on "Table 1".video_ref_raw_media_id="Table 2".video_ref_raw_media_id and (Table2.start_seconds>=Table1.start_seconds and Table2.end_seconds<=Table1.end_seconds)

Однако это не работает. Есть идеи?

Идеальный выход:

video_ref_raw_media_id | start_seconds | end_seconds | step | label
ABC001                 | 0:00          | 0:30        | 1    | green
ABC001                 | 0:00          | 0:30        | 1    | black
ABC001                 | 0:31          | 1:30        | 2    | null
ABC001                 | 1:31          | 2:30        | 3    | green
ABC002                 | 0:00          | 0:35        | 1    | red
ABC002                 | 0:36          | 1:46        | 2    | null
ABC002                 | 1:47          | 2:44        | 3    | null

1 Ответ

1 голос
/ 01 февраля 2020

Вы должны избавиться от полуколонны, и она будет работать, и привести к int:

    Select * from 
    "Table 1"
    LEFT JOIN "Table 2" on "Table 1".video_ref_raw_media_id="Table 2".video_ref_raw_media_id 
    and cast((replace(Table2.start_seconds,':','') as int)>=cast(replace(Table1.start_seconds,':','') as int) 
and cast(replace(Table2.end_seconds,':','') as int)<=cast(replace(Table1.end_seconds,':','') as int))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...