ЛЕВОЕ СОЕДИНЕНИЕ ФИЛЬТР

Если у меня есть две таблицы — Table_A и Table_B — и если я использую LEFT JOIN для их объединения, как я могу отфильтровать только те строки из Table_B, которые соединяются со строками в Table_A более одного раза?
Разновидность БД: Teradata


person Adam    schedule 25.03.2013    source источник
comment
Вы имеете в виду, СГРУППИРОВАТЬ ПО?   -  person Mar Cejas    schedule 25.03.2013
comment
GROUP BY и HAVING count() › 1   -  person kufudo    schedule 25.03.2013
comment
извините, я должен исправить вопрос - я должен отфильтровать все строки из таблицы_B, которые участвовали в объединении более одного раза   -  person Adam    schedule 25.03.2013


Ответы (4)


Если я не ошибаюсь, Teradata поддерживает оконные функции, так что это может сработать:

select *
from (
  select a.*, 
         b.*
         count(*) over (partition by a.MyCol) as cnt
  from Table_A a
     left join Table_B b ON a.MyCol = b.MyCol 
  where ... -- Conditions
) t
where cnt > 1

(не испытано)

person a_horse_with_no_name    schedule 25.03.2013
comment
Идеальный! Вот и все! Спасибо! - person Adam; 25.03.2013

Вот версия вашего принятого ответа для Teradata:

select a.*, 
       b.*
from Table_A a
left join Table_B b 
ON a.MyCol = b.MyCol 
where ... -- Conditions
QUALIFY count(*) over (partition by a.MyCol) > 1

Обратите внимание, что QUALIFY — это расширение Teradata для стандарта ANSI (и очень удобное).

person BellevueBob    schedule 25.03.2013

может быть, это поможет вам

1) you can used INNER JOIN .
2) you can also check joind row is not null or blank . 
person Community    schedule 25.03.2013

Select a.*,b.* from Table_A a
left join Table_B b on condition
HAVING COUNT(DISTINCT a.value)>1

внесите необходимые правки и проверьте

person Sandy    schedule 25.03.2013