Mysql 创建一个视图,其中t1中的记录在t2中不存在?是否确认联合/左联合/内联合?

Mysql 创建一个视图,其中t1中的记录在t2中不存在?是否确认联合/左联合/内联合?,mysql,Mysql,我试图查看t1中的记录,其中t1中的源id不在t2中 像。。。“其他表中不存在哪些记录?” 我需要在FROM子句中包含t2吗?谢谢 SELECT t1.fee_source_id, t1.company_name, t1.document FROM t1 WHERE t1.fee_source_id NOT IN ( SELECT t1.fee_source_id FROM t1 INNER JOIN t2 ON t1.fee_source_id = t2.fee_sour

我试图查看t1中的记录,其中t1中的源id不在t2中

像。。。“其他表中不存在哪些记录?”

我需要在FROM子句中包含t2吗?谢谢

SELECT t1.fee_source_id, t1.company_name, t1.document
FROM t1
WHERE t1.fee_source_id NOT IN (

     SELECT t1.fee_source_id
     FROM t1 INNER JOIN t2 ON t1.fee_source_id = t2.fee_source

                              )
ORDER BY t1.aif_id DESC 

您希望实现反连接,MySQL中有三种可能:

  • 在中使用

    SELECT fee_source_id, company_name, document
    FROM   t1
    WHERE  fee_source_id NOT IN (SELECT fee_source FROM t2)
    ORDER BY aif_id DESC
    
    SELECT   t1.fee_source_id, t1.company_name, t1.document
    FROM     t1 LEFT JOIN t2 ON t2.fee_source = t1.fee_source_id
    WHERE    t2.fee_source IS NULL
    ORDER BY t1.aif_id DESC
    
  • 使用
    存在

    SELECT fee_source_id, company_name, document
    FROM   t1
    WHERE  NOT EXISTS (
      SELECT * FROM t2 WHERE t2.fee_source = t1.fee_source_id LIMIT 1
    )
    ORDER BY aif_id DESC
    
  • 使用
    连接

    SELECT fee_source_id, company_name, document
    FROM   t1
    WHERE  fee_source_id NOT IN (SELECT fee_source FROM t2)
    ORDER BY aif_id DESC
    
    SELECT   t1.fee_source_id, t1.company_name, t1.document
    FROM     t1 LEFT JOIN t2 ON t2.fee_source = t1.fee_source_id
    WHERE    t2.fee_source IS NULL
    ORDER BY t1.aif_id DESC
    
  • 根据:

    总结 MySQL可以优化所有三种方法,以执行某种
    嵌套循环反连接

    它将从
    t\u left
    获取每个值,并在
    t\u right.value
    上的索引中查找。如果索引命中或未命中,相应的谓词将立即分别返回
    FALSE
    TRUE
    ,并且在不检查
    t\u right
    中的其他行的情况下,将立即决定是否从
    t\u left
    返回该行

    然而,这三种方法生成三种不同的计划,由三段不同的代码执行。执行
    EXISTS
    谓词的代码的效率比执行
    index_subquery
    LEFT JOIN
    的代码低约30%
    优化为使用
    Not EXISTS
    方法

    这就是为什么在MySQL中搜索缺失值的最佳方法是使用
    左连接/is NULL
    不在
    中,而不是
    不存在

    然而,我不完全确定这一分析如何与MySQL手册部分相一致(据我所知),该部分建议上面的第二种方法应该比第一种更有效。

    下面的另一个选项(类似于反连接)。。。上面的回答很好。谢谢

     SELECT   D1.deptno, D1.dname
            FROM     dept D1
            MINUS
            SELECT   D2.deptno, D2.dname
            FROM     dept D2, emp E2
            WHERE    D2.deptno = E2.deptno
            ORDER BY 1;
    
    您的问题已标记,不支持
    减号
    运算符。