Как сравнить две строки или получить поля, значение которых не совпадает со сравниваемыми строками? - PullRequest
2 голосов
/ 18 апреля 2011

Я пытаюсь получить поля, значение которых не совпадает с базой в сравниваемых строках. Это сложно объяснить, поэтому я приведу таблицу с примерами и ее результаты.

Таблица: Заказы

|  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 сделает все остальное. Но если это возможно, просто запрос, это было бы здорово. Даже если я не разбираюсь в хранимых процедурах, если это единственный способ, позвольте мне показать, и я проверю это.

У меня еще нет ни одного рабочего запроса, и я даже не получил результат, близкий к тому, что я хотел. Любой ответ будет оценен. Спасибо!

ОБНОВЛЕНИЕ:

Полагаю, на результаты сложно ответить. Я опубликую другой результат, который, я думаю, легко решить.

Results2

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

Для вторых результатов мне нужно знать, имеет ли поле несоответствующее значение, если да, оно будет отображаться 1. Процесс этих результатов заключается в сравнении двух строк, которые являются Task = 1 и Task = 2 с одинаковыми orderId , Я отфильтрую поля, которые имеют непревзойденное значение в Java.

Я надеюсь, что кто-то здесь может ответить на это даже вторые результаты. Если вы можете ответить на первые результаты, это было бы очень полезно.

Ответы [ 2 ]

0 голосов
/ 18 апреля 2011
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
0 голосов
/ 18 апреля 2011

Попробуйте это:

select orderid
from orders
group by orderid
having count(*) > 1
and min(field1) <> max(field1) and min(field2) <> max(field2) ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...