我有一张表,其中包含一些用于特定目的的非规范化数据(不要问),因此它有几百列。有一个主键。
此表每周更新一次,但大多数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...
之类的东西,比如一次比较整行?
我很确定答案是否定的,但......: - )
答案 0 :(得分:2)
您可以编写一个程序(用您喜欢的编程语言)来构建查询。程序将查找数据库的模式,查找表的所有列,并从中构造查询。我不认为在纯SQL中可以这样做,但即使可能,纯SQL也可能是错误的工具。
答案 1 :(得分:1)
您可以使用行值语法,但仍需要命名所有列:
(t1.col1, t1.col2, ...) <> (t2.col1, t2.col2, ...)
答案 2 :(得分:0)
更新1
检查出来:https://www.techonthenet.com/mysql/intersect.php
很抱歉缺少代码,我没有时间详细说明,但这就是主意。