zoukankan      html  css  js  c++  java
  • sql 查询 一张表里面的数据 在另一张表中是否存在 和 比对两个集合中的差集和交集(原创)

    这两天在搞一个修复的小功能

    需求:  A表,B表,C表,日志文件

    先筛选出A表和B表中都符合条件的数据,然后检查这些数据在C表中是否存在。如果不存在,就从日志中读取数据,存入C表中,如果存在,则不做操作。

    逻辑理清之后,自己尝试了很多方式,一直都不能让自己满意,都感觉性能太低,还可以在优化,因为时间关系,不能再拖了,就先记录一下 目前还凑合的实现方式,后续有时间的话,会再次优化一下。以下共勉

    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;

    取出日志中指定位置的数据

     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集合中

    将日志中所需数据集合存在ListB集合中

    然后利用IEnumerable集合中Intersect(交集)函数,筛选出我所需的数据

    很简单的一个小实现,每天进步一点点。。。。

  • 相关阅读:
    第6章 对列表应用样式和创建导航条
    第3章 可视化格式模型
    第2章 为样式找到应用目标
    精通CSS 第1章
    JavaScript作用域学习笔记
    getByClass()
    判断各种数据类型
    值类型和引用类型的区别
    [原]Docker部署SuperMap8.1.1
    Docker初步
  • 原文地址:https://www.cnblogs.com/fengxiaojiu/p/11023802.html
Copyright © 2011-2022 走看看