70769


二つのテーブルがあり、一つを商品のマスターテーブル、もう一つは広告を設定した場合にのみデータが蓄積されるテーブルがあります。

マスターテーブルの各商品毎に広告を設定されているもののみにFlagを立てたいのですが、  
なぜかうまくいきません。どのようなSQLコードをかけばよろしいでしょうか。

[code]

    master_table as master
    productID,name
    45473xc, nintendo
    33333xc, sony
    
    ads_table as ads
    productID, adsID
    45473xc, 32311
    
[/code]

adsIDは必ず数字になります。  
上記テーブルがあり、下記のようにコードを書いたところ

[code]

    with ads as
    (
    select 
    productID,
    case
     when adsID >= 1 then 1
     else 0 ends as ads_flag
    from ads_table
    )
    
    select
    master.productID, master.name, ads.ads_flag
    from master_table as master
    left join ads
    on ads.productID = master.productID
    
    where master.productID in
    (
    45473xc,
    33333xc
    )
    
[/code]

なぜか45473xcのレコードしか表示されず、33333xcは表示されませんでした。

[code]

    master.productID, master.name, ads.ads_flag
    45473xc, nintendo, 1
    
[/code]

実現したい結果はこちらです。

[code]

    master.productID, master.name, ads.ads_flag
    45473xc, nintendo, 1
    33333xc, sony, 0
    
[/code]

この問題を解決するにはどのようなコードを書けば良いでしょうか。


CC BY-SA 4.0
2020-09-28T00:51:07.230
70768
2020-09-28T01:18:45.580
23420
question
sql
SQL データが存在する場合にのみFlagを立てる


試してないですが、こんな感じでどうですかね。

[code]

    SELECT master_table.productID, 
           master_table.name, 
           CASE WHEN ads_table.adsID IS NULL THEN 0 ELSE 1 END AS ads_flag
      FROM master_table
      LEFT JOIN ads_table
        ON master_table.productID = ads_table.productID
    
[/code]


CC BY-SA 4.0
2020-09-28T01:18:45.580
70769
2020-09-28T01:18:45.580
21092
70768
answer