比较两个表的行和列
问题描述:
- 我有两个表Table 1和Table
- 在table1的字段名是cert_no和表2中字段名是CER1,cert2,cert3,cert4,cert5
- 这是不是在价值表2(CER1,cert2,cert3,cert4,cert5)独自想显示
- 如果两个表中有相同的值只transfile_file要显示
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' )
答
尝试:
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')
+0
我试过这个只有第一次数据检查(certno1)剩下的所有数据显示 –
答
如果使用例如Microsoft SQL Server的还有一个功能是EXCEPT 2代表具有相同的Fileds(名称相同,相同类型和相同的位置)之间返回不同的行。在Oracle中,MINUS操作与EXCEPT相同。
在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
如果还不算太晚,我建议改变你的餐桌设计。 – ThinkTank