比较MySQL中的MANY列?

时间:2017-11-07 07:04:57

标签: mysql sql sql-insert

我有一张表,其中包含一些用于特定目的的非规范化数据(不要问),因此它有几百列。有一个主键。

此表每周更新一次,但大多数id:s将与前一周具有相同的数据。

现在,我需要将所有记录版本存储在历史记录表中,即如果记录了ID为X的记录,则为N周,第N + 1周没有变化但是有些数据在N + 2和N + 3周更改,那么历史记录表应包含三个记录:来自N,N + 2和N + 3周的记录。

在技术上很容易编写适当的insert查询,但它会涉及每列的比较,因此它将是一个非常长的SQL查询。我确信它会起作用,但是......

MySQL是否有任何方法可以比较所有列而不为每列明确写...or t1.col1 <> t2.col1...?即像...t1.allcolumns <> t2.allcolumns...之类的东西,比如一次比较整行?

我很确定答案是否定的,但......: - )

3 个答案:

答案 0 :(得分:2)

您可以编写一个程序(用您喜欢的编程语言)来构建查询。程序将查找数据库的模式,查找表的所有列,并从中构造查询。我不认为在纯SQL中可以这样做,但即使可能,纯SQL也可能是错误的工具。

答案 1 :(得分:1)

您可以使用行值语法,但仍需要命名所有列:

(t1.col1, t1.col2, ...) <> (t2.col1, t2.col2, ...)

答案 2 :(得分:0)

更新1

检查出来:https://www.techonthenet.com/mysql/intersect.php

  1. 与t1和t2相交。结果=两个表上的行。
  2. 从交叉结果中选择t1中的所有恶魔。
  3. 很抱歉缺少代码,我没有时间详细说明,但这就是主意。