将两个表与行和列进行比较

时间:2016-02-19 13:50:13

标签: php mysql join

  1. 我有两个表table1和table2
  2. 在table1中,fieldname为cert_no,在table2中,fieldname为cer1,cert2,cert3,cert4,cert5
  3. 仅显示table2(cer1,cert2,cert3,cert4,cert5)中的值
  4. 如果两个表具有相同的值,则只显示transfile_file
  5.    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'
              )
    

2 个答案:

答案 0 :(得分:0)

如果您使用例如Microsoft SQL Server,则有一个函数EXCEPT,它返回两个表之间具有相同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

答案 1 :(得分:-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')