0

notexistsを使用したクエリは次のとおりです。joinを使用してこのクエリを書き直すことはできますか?

SELECT name,
       trans
FROM skyplan_deploy.deploy_stars d
WHERE apt='KOPF'
  AND name!=trans
  AND NOT EXISTS
    (SELECT DISTINCT c.star_ident,
                     c.fix_ident
     FROM corept.std_star_leg c
     INNER JOIN
       (SELECT star_ident,
               transition_ident,
               max(sequence_num) seq,
               route_type
        FROM corept.std_star_leg
        WHERE data_supplier='J'
          AND airport_ident='KOPF'
        GROUP BY star_ident,
                 transition_ident)b ON c.sequence_num=b.seq
     AND c.star_ident=b.star_ident
     AND c.transition_ident=b.transition_ident
     WHERE c.data_supplier='J'
       AND c.airport_ident='KOPF'
       AND d.name=c.star_ident
       AND d.trans=c.fix_ident);

ありがとうございました

corept.std_star_legテーブルをこれとします。

star_ident transition_ident sequence_num fix_ident airport
A               XX               10         QWE     KOPF  
A               XX               20         WER     KOPF  
A               XX               30         HYU     KOPF  
A               XX               40         GJI     KOPF   
B               YY               10         SJI     KOPF  
B               YY               20         DJI     KOPF  
B               YY               30         FJI     KOPF  
B               YY               40         GHI     KOPF  
B               YY               50         KDI     KOPF 

内部結合を実行すると、次のような結果が得られます。

A               XX               40         GJI  
B               YY               50         KDI  

したがって、最大sequence_num行を取得します。その後、skyplan_deploy.deploy_starsテーブルは次のようになります。

apt            name              trans  
KOPF            A                 GJI  
KOPF            A                 FJI  
KOPF            A                 DHI  
KOPF            B                 KDI  
KOPF            B                 VNM  

出力する必要があります

A  FJI  
A  DHI  
B  VNM
4

1 に答える 1

2

これを試して:

SELECT NAME, trans
FROM skyplan_deploy.deploy_stars d
Left Join
(
        SELECT DISTINCT c.star_ident, c.fix_ident
        FROM corept.std_star_leg c
        INNER JOIN (
            SELECT star_ident, transition_ident, max(sequence_num) seq, route_type
            FROM corept.std_star_leg
            WHERE data_supplier = 'J' AND airport_ident = 'KOPF'
            GROUP BY star_ident, transition_ident
            ) b
            ON c.sequence_num = b.seq AND c.star_ident = b.star_ident AND c.transition_ident = b.transition_ident
        WHERE c.data_supplier = 'J' AND c.airport_ident = 'KOPF' 
)tbl
On d.NAME = tbl.star_ident AND d.trans = tbl.fix_ident
Where tbl.star_ident Is Null
于 2013-03-26T09:17:03.213 に答える