【发布时间】:2016-06-01 02:56:37
【问题描述】:
- 我有两个表table1和table2
- table1 中的字段名为 cert_no,table2 中的字段名为 cer1,cert2,cert3,cert4,cert5
- 想要显示不在table2中的值(cer1,cert2,cert3,cert4,cert5)
- 如果两个表的值相同,则只显示 transfile_file
【问题讨论】:
-
如果还不算太晚,我建议您更改您的餐桌设计。
【问题讨论】:
例如,如果您使用 Microsoft SQL Server,则有一个函数 EXCEPT 返回具有相同字段(相同名称、相同类型和相同位置)的 2 个表之间的不同行。在 Oracle 中,有与 EXCEPT 相同的 MINUS 操作。
在 MySQL 中,不幸的是,它没有实现 EXCEPT 或 MINUS 操作,因为在某些情况下它可以允许比替代方案更好的执行计划。
这是一个有效的替代方法,并且比使用 NOT IN 操作更有效:实现连接是 SQL 中的最佳解决方案。
enter code here
SELECT a.*
FROM table1 as a
LEFT JOIN table2 as b
ON a.tofolio = b.tofolio
WHERE b.tofolio IS NULL
【讨论】:
试试:
SELECT * FROM table1 WHERE folio = '123456' AND cm_flag !='X' AND certificate_no NOT IN (SELECT CONCAT(certno1,',',certno2,',',certno3,',',certno4,',',certno5,',',certno6,',',certno7,',',certno8,',',certno9,',',certno10) FROM table2 WHERE tofolio = '123456')
【讨论】: