Ако имам две таблици - Table_A
и Table_B
- и ако използвам LEFT JOIN
, за да ги обединя, как мога да филтрирам само тези редове от Table_B
, които са се съединили с редовете в Table_A
повече от веднъж?
Вкус на DB: Teradata
ЛЕВ ФИЛТЪР ЗА СЪЕДИНЯВАНЕ
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
Перфектно! Това е! Благодаря!
- 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