ЛЕВ ФИЛТЪР ЗА СЪЕДИНЯВАНЕ

Ако имам две таблици - Table_A и Table_B - и ако използвам LEFT JOIN, за да ги обединя, как мога да филтрирам само тези редове от Table_B, които са се съединили с редовете в Table_A повече от веднъж?
Вкус на DB: 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
съжалявам, трябва да коригирам въпроса - трябва да филтрирам всички редове от Table_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