Mysql 创建一个视图,其中t1中的记录在t2中不存在?是否确认联合/左联合/内联合?
我试图查看t1中的记录,其中t1中的源id不在t2中 像。。。“其他表中不存在哪些记录?” 我需要在FROM子句中包含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
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
嵌套循环反连接
它将从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;
您的问题已标记,不支持减号
运算符。