sql 查詢 一張表裏面的數據 在另外一張表中是否存在 和 比對兩個集合中的差集和交集(原創)

這兩天在搞一個修復的小功能函數

需求:  A表,B表,C表,日誌文件性能

先篩選出A表和B表中都符合條件的數據,而後檢查這些數據在C表中是否存在。若是不存在,就從日誌中讀取數據,存入C表中,若是存在,則不作操做。優化

邏輯理清以後,本身嘗試了不少方式,一直都不能讓本身滿意,都感受性能過低,還能夠在優化,由於時間關係,不能再拖了,就先記錄一下 目前還湊合的實現方式,後續有時間的話,會再次優化一下。如下共勉ui

1 DataTable dt= select   A.*,B.fhsj, case when (select count(*) from C where  fphm = A.fphm and fpdm=A.fpdm)>0 then 1 else 0 end as flag  from A  join  B  on B.listId=A.ID 
where A.cfjc_pt = '1' and A.inType <> '6' and A.recog = '1' and B.cyzt=='2' and (B.fhsj between '2019-06-12 00:00:00' and '2019-06-14 23:59:59' ) order by B.fhsj desc
//註解:flag:若是A表和B表 中都符合的數據在C表中存在,則flag=1,不存在的話,flag=0;

取出日誌中指定位置的數據spa

 1 FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
 2             StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default);
 3             StringBuilder sb = new StringBuilder();
 4             while (!sr.EndOfStream) {
 5                 sb.AppendLine(sr.ReadLine() + "<br>");
 6             }
 7             string[] result = Regex.Matches(sb.ToString(), @"(?<=開始字符串).*?(?=結束字符串)")
 8                 .Cast<Match>().Select(s => s.Value.Trim()).ToArray();
 9             foreach (var item in result) {
10                 Console.WriteLine(item.TrimStart(':').TrimEnd(','));
11             }
12             Console.ReadKey();

由於還要比對 dt 表中的數據  在日誌中是否存在。日誌

想了一個比較low的實現,將dt表中的惟一標識的數據信息取出來,放入一個ListA集合中code

將日誌中所需數據集合存在ListB集合中blog

而後利用IEnumerable集合中Intersect(交集)函數,篩選出我所需的數據字符串

 

 

很簡單的一個小實現,天天進步一點點。。。。string

相關文章
相關標籤/搜索