【问题标题】:compare rows of two query set result in same table在同一张表中比较两个查询集结果的行
【发布时间】:2015-08-09 09:38:19
【问题描述】:

我有一个表格,可以根据日期存储数据。

现在我需要检查:具有两个不同日期的行的数据之间是否有任何差异。

您可以简单地说,我有两个从同一个表中选择数据的查询,现在我必须比较每一行和每一列的值。例如我的两个查询是 -

SELECT *  FROM `national` WHERE `upload_date` = '2015-08-04'  // return 106 rows

SELECT *  FROM `national` WHERE `upload_date` = '2015-08-01'   // return 106 rows

我尝试将其与以下查询进行比较,但结果对我来说似乎不正确,我对此并不满意。

Select U.* from 
(SELECT t1.* FROM `national` t1 where upload_date = '2015-08-01'
union all
SELECT t2.*  FROM `national` t2 WHERE `upload_date` = '2015-08-04' ) U
GROUP BY emp_id, uqi_id
HAVING COUNT(*) = 1

谁能给我正确的查询??谢谢

【问题讨论】:

  • 我不确定 MySQL 的方式,但array_diff() 将是您的 PHP 出路
  • 是的,这也可能有效,但我认为这将是一个漫长的过程。它可以通过一个 MySQL 查询来完成,我正在寻找它。
  • 如果你只需要比较一个日期,不是真的。如果您要比较成千上万,那么是的,它将增加更多的处理时间。我相信它也可以用 MySQL 完成,所以希望你能得到你正在寻找的答案:)
  • 感谢@zanderwar 提供的链接,但我已经检查过了。

标签: php mysql


【解决方案1】:

试试这个

 (
  SELECT t1.* 
  FROM 
     `national` t1, `national` t2 
  where
      t1.upload_date = '2015-08-01' and t2.upload_date='2015-08-04' and
      -- put your columns here that you want to compare for same DATA
      -- like t1.name=t2.name and etc...
 ) 

【讨论】:

  • 根据你的说法,这个查询的结果是什么,它是返回不匹配列还是匹配?
  • 如果你写 = 通过替换我的注释代码,它将返回匹配的行,或者如果你写 !=,它将返回不匹配的行..
【解决方案2】:

你可以试试这样的

SELECT * FROM (SELECT * FROM `national` WHERE upload_date = '2015-08-01') a
INNER JOIN (SELECT * FROM `national` WHERE upload_date = '2015-08-04') b
     ON a.emp_id = b.emp_id AND a.uqi_id = b.uqi_id
ORDER BY uqi_id 

【讨论】:

  • 此查询返回空结果集。根据您的说法,这是什么意思,是返回空的不匹配结果还是什么??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-22
  • 1970-01-01
  • 2013-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-04
相关资源
最近更新 更多