小黑划船不用浆 2017-04-28 03:14 采纳率: 33.3%
浏览 973

关于not in的优化的问题

 SELECT
                <include refid="contractInList" />
            FROM
                cm_basic_info c
            LEFT JOIN (
                SELECT
                    *
                FROM
                    cm_basic_parties
                WHERE
                    flg_accounting = 1
                AND flg_own = 2
            ) p ON c.contract_id = p.contract_id
            LEFT JOIN cm_sign s ON c.contract_id = s.cm_id
            LEFT JOIN (
                SELECT
                    *
                FROM
                    cm_archive
                WHERE
                    biz_status = '02'
            ) arc ON c.contract_id = arc.cm_id
            WHERE 
                    EXISTS(
                        SELECT
                            contract_id
                        FROM
                            (
                                    SELECT
                                        creater_date AS create_date,
                                        contract_id
                                    FROM
                                        cm_turn
                                    WHERE
                                        turn_toUser =   #{authPersonal}
                                        AND STATUS = '0'
                                        AND biz_status = '02' ##先显示数据为别人移交过来
                            ) xi
                                where  xi.contract_id = c.contract_id
                    )
            and  ##排除掉别人移交过来后被自己完整移交出去的
            c.contract_id   not in (
                    SELECT
                        d.contract_id
                    FROM
                        (
                            SELECT
                                creater_date AS create_date,
                                contract_id
                            FROM
                                cm_turn
                            WHERE
                                turn_toUser =   #{authPersonal}
                            AND STATUS = '0'
                            AND biz_status = '02' ##别人移交过来的所有数据
                        ) d
                    WHERE
                        d.contract_id IN (
                            SELECT
                                contract_id
                            FROM
                                (
                                    SELECT
                                        creater_date AS create_date,
                                        contract_id
                                    FROM
                                        cm_turn
                                    WHERE
                                        turn_user =   #{authPersonal}
                                        AND STATUS = '0'
                                        AND biz_status in('01', '02' )
                     ##移交给他人的所有成功数据

                                ) b
                            WHERE
                                b.create_date > d.create_date
                        )
                )

这里想要把not in替换掉,但是不能使用not exists,否则返回的结果不对,求教大神该怎么改

  • 写回答

2条回答 默认 最新

  • BenjaminDeng 2017-04-28 03:29
    关注

    使用with as试一试

    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)