2つのテーブルが関連付けられており、1つのテーブルデータが別のテーブルにも存在するかどうかをクエリーし、このデータは赤でソートされます.

1203 ワード

ボスは私に需要を与えて、2枚の表があって、1枚は警報の結果の表cimsを表しますwarn_result、もう1枚はエンタープライズモニタテーブルcims_warn_モニタアラート結果テーブルを示すリストを作成します
でもcims_warn_resultテーブルの企業はcims_warn_モニタテーブルに存在する場合は、データ全体を赤で並べ替えます.
実現構想:
第一の方法
1)どの企業がcimsにいるかを問い合わせるsqlを書く.warn_resultテーブルに存在しcims_warn_モニタテーブルでは、実装方法はexist
select * from cims_warn_result result where exist(select'x'from cims_warn_monitor mon where mon.エンタープライズコード=result.エンタープライズコード)
次に、このデータが1であることをカラムに識別します.
2)もう1本sqlを書いて、どの企業がcimsにいるかを調べる.warn_resultテーブルには存在しますがcims_には存在しませんwarn_モニタテーブルでは、実装方法はnot exist
select * from cims_warn_result result where not exist(select'x'from cims_warn_monitor mon where mon.エンタープライズコード=result.エンタープライズコード)
次に、このデータが2であることをカラムに識別します.
最後の2つのテーブルの関連付け、union all
これにより,データ1がモニタリングされた企業,2がモニタリングされていない企業が得られる.
第2の方法
直接アラート結果テーブルcims_warn_resultとエンタープライズモニタテーブルcims_warn_モニタは関連付けられていますが、cims_を使用します.warn_モニタテーブルのuuid判断は、空であればこの列に2と表示し、空でなければ、
識別は1で、case whenで実現され、コードは以下の通りである.
case when b.uuid is null THEN 2 else 1 end as mon
最後にorder by mon ascでいいです
2つ目の方法が最適で、コード量が少ないので、1つ目の方法はお勧めしません.コード量が大きすぎて、複雑に見えます.
忘れるのが怖くてノートをとった