greatfung:
私はレコードが見つからない場合は、デフォルトのレコードが返されます、チームの特定の値を格納できるテーブルを持っていると思います。
テーブル名:製品
ProdID ProdName Team
1 AAA <NULL>
1 AAA_T1 T1
2 BBB <NULL>
3 CCC <NULL>
3 CCC_T1 T1
3 CCC_T2 T2
4 DDD <NULL>
4 DDD_T3 T3
クエリの場合、チームはすべての製品が返されます、で渡す必要があります。
チームT1
ProdID ProdName
1 AAA_T1
2 BBB
3 CCC_T1
4 DDD
チームT2
ProdID ProdName
1 AAA
2 BBB
3 CCC_T2
4 DDD
チームT3
ProdID ProdName
1 AAA
2 BBB
3 CCC
4 DDD_T3
私はこれをどのように実現するのですか?私はテーブル構造を変更する必要がありますか?
離れて渡します:
とNOT EXISTS
:
select distinct p.prodname
from products p
where p.team = 'T1'
or (
p.team is null
and not exists (
select 1 from products
where prodid = p.prodid and team = 'T1'
)
)
あなたは削除することがdistinct
重複しない場合。
参照のデモを。
または条件の集約と:
select max(case when team = 'T1' or team is null then prodname end) prodname
from products
group by prodid
参照のデモを。
結果:
> | prodname |
> | :------- |
> | AAA_T1 |
> | BBB |
> | CCC_T1 |
> | DDD |