Java 如何比较两行或获取值与比较行不匹配的字段?

Java 如何比较两行或获取值与比较行不匹配的字段?,java,mysql,sql,compare,Java,Mysql,Sql,Compare,我试图根据比较的行获取值不匹配的字段。这很难解释,所以我会把样本表和它的结果放在这里 表格:订单 | seqid | orderId | taskId | field1 | field2 | field3 | field4 | +---------+-----------+----------+----------+----------+----------+----------+ | 1 | 1 | 1 | a

我试图根据比较的行获取值不匹配的字段。这很难解释,所以我会把样本表和它的结果放在这里

表格:订单

|  seqid  |  orderId  |  taskId  |  field1  |  field2  |  field3  |  field4  |
+---------+-----------+----------+----------+----------+----------+----------+ 
|  1      |  1        |  1       |  a       |  b       |  c       |  d       |
|  2      |  1        |  2       |  a       |  b       |  c       |  d       |
|  3      |  2        |  1       |  a       |  b       |  c       |  d       |
|  4      |  2        |  2       |  a       |  c       |  c       |  c       |
|  5      |  3        |  1       |  a       |  a       |  a       |  a       |
结果:

|  OrderId  |  FieldName  |  Error  |
+-----------+-------------+---------+
|  2        |  field2     |  1      |
|  2        |  field4     |  1      |
您可以看到,
orderId
将使用其
taskId
进行比较。从字段1到字段4是要检查其值是否不匹配的字段。如果是,则获取字段名。列
Error
不是优先级,您可以忽略它。如果orderId只有一个任务,则不会对其进行比较

我的第一个计划是使用两个查询来分隔
taskId
,然后Java将完成其余的工作。但如果可能的话,只要一个查询就好了。即使我不熟悉存储过程,如果这是唯一的方法,那么让我展示一下,我会检查它

我还没有任何有效的查询,甚至没有得到一个接近我想要的结果。任何答案都将不胜感激。谢谢

更新:

|  OrderId  |  FieldName  |  Error  |
+-----------+-------------+---------+
|  2        |  field2     |  1      |
|  2        |  field4     |  1      |
我想结果很难回答。我将发布另一个结果,我认为这很容易解决

结果2

|  orderId  |  field1  | field2  | field3  |  field4  |
+-----------+----------+---------+---------+----------+
|  1        |  0       | 0       | 0       |  0       |
|  2        |  0       | 1       | 0       |  1       |
对于第二个结果,我需要知道字段是否有不匹配的值。如果是,它将显示1。这个结果的过程是比较两行,即
Task=1
Task=2
,它们具有相同的
orderId
。我将过滤Java中具有不匹配值的字段

我希望这里有人能回答这个问题,即使是第二个结果。如果你能回答第一个结果,那将是一个很大的帮助。

试试这个:

select orderid
from orders
group by orderid
having count(*) > 1
and min(field1) <> max(field1) and min(field2) <> max(field2) ...
选择orderid
从命令
按医嘱ID分组
计数(*)大于1的
和最小值(字段1)最大值(字段1)和最小值(字段2)最大值(字段2)。。。
试试这个:

select orderid
from orders
group by orderid
having count(*) > 1
and min(field1) <> max(field1) and min(field2) <> max(field2) ...
选择orderid
从命令
按医嘱ID分组
计数(*)大于1的
和最小值(字段1)最大值(字段1)和最小值(字段2)最大值(字段2)。。。

我已经试过了,但没有达到预期效果。谢谢我已经试过了,但没有达到我预期的效果。谢谢感谢这项基于我给定数据的工作。但我想我将有一个问题加入我的查询,但我知道这对我来说不会是一个问题。虽然我已经有了一个有效的查询,但我将在稍后尝试,以检查哪个查询更优化。但我想这是我的查询更优化。做得好,再次感谢:)感谢这项基于我给定数据的工作。但我想我将有一个问题加入我的查询,但我知道这对我来说不会是一个问题。虽然我已经有了一个有效的查询,但我将在稍后尝试,以检查哪个查询更优化。但我想这是我的查询更优化。干得好,再次感谢:)