2010-10-11 19 views

回答

2

没有关于数据的结构或大小的更多信息,你可以这样做:

SELECT IF(COUNT(*) = (SELECT COUNT(*) FROM table1) AND COUNT(*) = (SELECT COUNT(*) FROM table2),1,0) AS result FROM 
(
    SELECT * FROM table1 
    UNION 
    SELECT * FROM table2 
) tables_joined 

但要注意,它不是一个理想的解决方案。对于大型数据集,这可能需要一段时间

这是未经测试,但答案的一般前提是:

  • 加入两个表。如果结构一致(在基本级别 - 这不包括数据类型,索引等),那么您将不会收到任何错误
  • 连接后,比较行数与其中一个行中的行数表
  • 如果行数相等,则数据是相同的(因为否则连接将返回两行)。
  • 输出1如果相同,则返回0,否则返回0。
+0

感谢您的答复,但它似乎并不奏效。使用相同的表结构,即使一个表有一行而另一个有两行,表达式也会返回“1”。 – 2010-10-11 23:33:11

+1

感谢您的更新。事实上,如果计数与表1相同,则并不意味着计数与表2相同。我相应地更新了IF语句。 – 2010-10-12 09:01:40

+0

太棒了。谢谢! – 2011-03-10 07:37:37

1

相同的表必须具有相同的ID,所以你只需要检查是否有两个表中的id有什么区别,所以下面的代码应该是有帮助的:

Select count(*) from table1 where table1_id IN (select table2_id from table2); 

如果结果为0,那么就有区别。

更好的方法是观察和检查表结构,像(假设我们有一个名为orod1 2个表和orod2):

select table_name,column_name,data_type 
from information_schema.columns where table_schema='orod_schema' and table_name ='orod%'; 
+0

ID可以相同,但其余行中的数据可能完全不同。所有这些都将确认行数是相同的。我喜欢你的想法确认相同的结构。 – 2010-10-12 09:03:01

相关问题