2016-02-19 104 views
-6
  1. 我有两个表Table 1和Table
  2. 在table1的字段名是cert_no和表2中字段名是CER1,cert2,cert3,cert4,cert5
  3. 这是不是在价值表2(CER1,cert2,cert3,cert4,cert5)独自想显示
  4. 如果两个表中有相同的值只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' 
     ) 
+3

如果还不算太晚,我建议改变你的餐桌设计。 – ThinkTank

回答

-1

尝试:

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)剩下的所有数据显示 –

0

如果使用例如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