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

时间:2011-04-18 02:58:18

标签: java mysql sql compare

我正在尝试根据比较的行获取值不匹配的字段。这很难解释所以我会把样本表及其结果。

表:订单

|  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进行比较。从field1到field4是要检查它们的值是否不匹配的字段。如果是,则获取字段名称。列Error不是优先级,您可以忽略它。如果orderId只有一个任务,则不会进行比较。

我的第一个计划是使用两个查询将taskId分开,然后Java将完成其余的工作。但如果可能,只需要一个很棒的查询。即使我对存储过程知之甚少,如果它是唯一的方式让我展示,我会检查它。

我还没有任何有效的查询,甚至没有得到我想要的结果。任何答案都将是欣赏。谢谢!

更新:

我猜结果很难回答。我会发布另一个我认为很容易解决的结果。

结果2

|  orderId  |  field1  | field2  | field3  |  field4  |
+-----------+----------+---------+---------+----------+
|  1        |  0       | 0       | 0       |  0       |
|  2        |  0       | 1       | 0       |  1       |

对于第二个结果,我需要知道该字段是否具有不匹配的值,如果是,它将显示1.此结果的过程是比较Task = 1Task = 2这两个行。相同orderId。我将过滤Java中具有不匹配值的字段。

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

2 个答案:

答案 0 :(得分:0)

试试这个:

select orderid
from orders
group by orderid
having count(*) > 1
and min(field1) <> max(field1) and min(field2) <> max(field2) ...

答案 1 :(得分:0)

SELECT
  orderId,
  CASE MIN(field1) WHEN MAX(field1) THEN 0 ELSE 1 END AS field1,
  CASE MIN(field2) WHEN MAX(field2) THEN 0 ELSE 1 END AS field2,
  ...
FROM atable
GROUP BY
  orderId