2016-02-19 75 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