【问题标题】:compare two table with row and column比较两个表的行和列
【发布时间】:2016-06-01 02:56:37
【问题描述】:
  1. 我有两个表table1和table2
  2. table1 中的字段名为 cert_no,table2 中的字段名为 cer1,cert2,cert3,cert4,cert5
  3. 想要显示不在table2中的值(cer1,cert2,cert3,cert4,cert5)
  4. 如果两个表的值相同,则只显示 transfile_file
选择 * 从表 1 WHERE 作品集 = '123456' 和 cm_flag !='X' AND certificate_no NOT IN (SELECT CONCAT(certno1,certno2,certno3,certno4,certno5,certno6,certno7,certno8,certno9,certno10) 从表 2 WHERE tofolio = '123456' )

【问题讨论】:

  • 如果还不算太晚,我建议您更改您的餐桌设计。

标签: php mysql join


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    试试:

    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')
    

    【讨论】:

    • 我只尝试了这第一个数据单独检查(certno1)剩余所有数据显示
    猜你喜欢
    • 2011-06-19
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 2021-04-15
    • 1970-01-01
    相关资源
    最近更新 更多