SQL присоединение больше / меньше чем - PullRequest
0 голосов
/ 16 февраля 2020

У меня есть 2 таблицы

First

Second

I Так что мне нужно получить таблицу, в которой будут исключены строки, для которых дата для каждый "id" больше, чем во второй таблице "datetop"

Я пробовал внутреннее объединение с двойным условием: id = id и Date

Представьте, вот что я хочу получить:

result

Ответы [ 3 ]

0 голосов
/ 16 февраля 2020

Это ситуация, когда all может быть полезным:

select a.*
from a
where a.date < all (select b.datestop
                    from b
                    where b.id = a.id and b.status = 'Stopped'
                   );
0 голосов
/ 16 февраля 2020

Я бы использовал NOT EXISTS, что очень эффективно:

select t1.*
from table1 t1
where not exists ( 
  select 1 from table2 t2 
  where t2.id = t1.id and t2.datestop <= t1.date  
)

Не ясно, нужно ли вам значение Status, которое должно быть 'Stopped' для вашего требования. Поэтому, возможно, вам нужно изменить предложение WHERE подзапроса на:

where t2.id = t1.id and t2.datestop <= t1.date and t2.status = 'Stopped'
0 голосов
/ 16 февраля 2020

Рассмотрим:

select a.*
from tablea a
left join tableb b on b.id = a.id
where b.id is null or b.datestop > a.date

Это фразы: получить все записи в tablea, для которых либо нет записи с таким же id в tableb, либо чья date меньше чем datestop соответствующей записи в tableb.

...