Если у меня есть две таблицы — Table_A
и Table_B
— и если я использую LEFT JOIN
для их объединения, как я могу отфильтровать только те строки из Table_B
, которые соединяются со строками в Table_A
более одного раза?
Разновидность БД: Teradata
ЛЕВОЕ СОЕДИНЕНИЕ ФИЛЬТР
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
Идеальный! Вот и все! Спасибо!
- 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