ラベル join の投稿を表示しています。 すべての投稿を表示
ラベル join の投稿を表示しています。 すべての投稿を表示

2022年12月24日土曜日

SQLite3 FULL JOIN (完全外部結合)について

概要

SQLite ver3.39.0 からFULL JOIN(FULL OUTER JOIN)が利用可能になった。 なお、結合できなかった部分はnullになる。

実行例

user_id mail_address last_login 0001 userA@example.com 2022-12-01 0002 userB@example.com 2022-12-09 0003 userC@example.com 2022-12-11 siteA_user user_id mail_address last_login X001 userB@example.com 2022-11-28 Y002 userD@example.com 2022-12-04 Z003 userC@example.com 2022-12-08 FULL JOIN siteB_user siteA_last_login SiteA_mail_address siteB_mail_address siteB_last_login 2022-12-01 userA@example.com 2022-12-09 userB@example.com userB@example.com 2022-11-28 2022-12-11 userC@example.com userC@example.com 2022-12-08 userD@example.com 2022-12-04
                    
select
    A.last_login    as siteA_last_login
    , A.mail_address    as siteA_mail_address
    , B.mail_address  as siteB_mail_address
    , B.last_login    as siteB_last_login
from
    siteA_user A
    full join 
        siteB_user B
        on
            A.mail_address = B.mail_address
;
                    
                
環境
  • Windows 10 64bit
  • SQLite3 (3.39.2) Command-Line Shell
                    
sqlite> .nullvalue [null]
sqlite> .mode box
sqlite> select * from siteA_user;
┌─────────┬───────────────────┬────────────┐
│ user_id │   mail_address    │ last_login │
├─────────┼───────────────────┼────────────┤
│ 0001    │ userA@example.com │ 2022-12-01 │
│ 0002    │ userB@example.com │ 2022-12-09 │
│ 0003    │ userC@example.com │ 2022-12-11 │
└─────────┴───────────────────┴────────────┘
sqlite> select * from siteB_user;
┌─────────┬───────────────────┬────────────┐
│ user_id │   mail_address    │ last_login │
├─────────┼───────────────────┼────────────┤
│ X001    │ userB@example.com │ 2022-11-28 │
│ Y002    │ userD@example.com │ 2022-12-04 │
│ Z003    │ userC@example.com │ 2022-12-08 │
└─────────┴───────────────────┴────────────┘
sqlite> select
   ...>      A.last_login    as siteA_last_login
   ...>      , A.mail_address    as siteA_mail_address
   ...>      , B.mail_address  as siteB_mail_address
   ...>      , B.last_login    as siteB_last_login
   ...> from
   ...>      siteA_user A
   ...>      full join
   ...>          siteB_user B
   ...>          on
   ...>              A.mail_address = B.mail_address
   ...> ;
┌──────────────────┬────────────────────┬────────────────────┬──────────────────┐
│ siteA_last_login │ siteA_mail_address │ siteB_mail_address │ siteB_last_login │
├──────────────────┼────────────────────┼────────────────────┼──────────────────┤
│ 2022-12-01       │ userA@example.com  │ [null]             │ [null]           │
│ 2022-12-09       │ userB@example.com  │ userB@example.com  │ 2022-11-28       │
│ 2022-12-11       │ userC@example.com  │ userC@example.com  │ 2022-12-08       │
│ [null]           │ [null]             │ userD@example.com  │ 2022-12-04       │
└──────────────────┴────────────────────┴────────────────────┴──────────────────┘
                    
                

参考URL

2022年12月17日土曜日

SQLite3 RIGHT JOIN (右外部結合)について

概要

SQLite ver3.39.0 からRIGHT JOIN(RIGHT OUTER JOIN)が利用可能になった。 なお、結合できなかった部分はnullになる。

実行例

user_id name 0001 ito 0002 takahashi sign_date user_id 2022-12-01 0001 2022-12-04 0002 2022-12-08 0001 2022-12-08 0003 RIGHT JOIN user sign_history name sign_date user_id ito 2022-12-01 0001 takahashi 2022-12-04 0002 ito 2022-12-08 0001 2022-12-08 0003
                    
select
    A.name
    , B.sign_date
    , B.user_id
from
    user  A
    right join
        sign_history B
        on
            A.user_id = B.user_id
order by
    B.sign_date
    , B.user_id
;
                    
                
環境
  • Windows 10 64bit
  • SQLite3 (3.39.2) Command-Line Shell
                    
sqlite> .mode box
sqlite> .nullvalue [null]
sqlite> select * from user;
┌─────────┬───────────┐
│ user_id │   name    │
├─────────┼───────────┤
│ 0001    │ ito       │
│ 0002    │ takahashi │
└─────────┴───────────┘
sqlite> select * from sign_history;
┌────────────┬─────────┐
│ sign_date  │ user_id │
├────────────┼─────────┤
│ 2022-12-01 │ 0001    │
│ 2022-12-04 │ 0002    │
│ 2022-12-08 │ 0001    │
│ 2022-12-08 │ 0003    │
└────────────┴─────────┘
sqlite> select
   ...>     A.name
   ...>     , B.sign_date
   ...>     , B.user_id
   ...> from
   ...>     user  A
   ...>     right join
   ...>         sign_history B
   ...>         on
   ...>             A.user_id = B.user_id
   ...> order by
   ...>     B.sign_date
   ...>     , B.user_id
   ...> ;
┌───────────┬────────────┬─────────┐
│   name    │ sign_date  │ user_id │
├───────────┼────────────┼─────────┤
│ ito       │ 2022-12-01 │ 0001    │
│ takahashi │ 2022-12-04 │ 0002    │
│ ito       │ 2022-12-08 │ 0001    │
│ [null]    │ 2022-12-08 │ 0003    │
└───────────┴────────────┴─────────┘
                    
                

参考URL