特定のレコードが見つからない場合、デフォルトのレコードを取得するためのMySQLのクエリ

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      |

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=280431&siteId=1