2013-03-25 3 views
1

Если у меня есть две таблицы - Table_A и Table_B - и если я использую LEFT JOIN присоединиться к ним, как я могу фильтровать только те строки из Table_B присоединившихся с рядами в Table_A более одного раза?
DB вкус: TeradataLEFT JOIN ФИЛЬТР

+0

Вы имеете в виду GROUP BY? –

+0

GROUP BY и HAVING count()> 1 – kufudo

+0

Извините, я должен исправить вопрос - мне нужно отфильтровать все строки из таблицы_B, которые участвовали в объединении более одного раза – Adam

ответ

1

Если я не ошибаюсь, 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 

(не проверено)

+0

Отлично! Это оно! Благодаря! – Adam

0

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

1) you can used INNER JOIN . 
2) you can also check joind row is not null or blank . 
0
Select a.*,b.* from Table_A a 
left join Table_B b on condition 
HAVING COUNT(DISTINCT a.value)>1 

внести необходимые изменения и проверить

+0

не работает ..... – Adam

1

Вот 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 (и удобный один в этом).