SQL - Нахождение различий в порядке строк двух таблиц - PullRequest
2 голосов
/ 07 августа 2009

У меня есть две таблицы идентификаторов и дат, и я хочу упорядочить обе таблицы по дате и увидеть те идентификаторы, которые не в том же порядке

например. table_1

id   |  date
------------
A       01/01/09
B       02/01/09
C       03/01/09

table_2

id   |  date
------------
A       01/01/09
B       03/01/09
C       02/01/09

и получите результаты

 B
 C

По общему признанию, я мог просто вывести результаты заказа по запросу и сравнить их, но мне было интересно, есть ли SQL-y способ получить те же результаты.

Изменить, чтобы уточнить, даты не обязательно совпадают между таблицами, это просто для определения порядка

Спасибо

Ответы [ 3 ]

3 голосов
/ 07 августа 2009

если даты отличаются в TABLE_1 и TABLE_2, вам придется объединить обе таблицы по их рангу. Например:

SQL> WITH table_1 AS (
  2     SELECT 'A' ID, DATE '2009-01-01' dt FROM dual UNION ALL
  3     SELECT 'B', DATE '2009-01-02' FROM dual UNION ALL
  4     SELECT 'C', DATE '2009-01-03' FROM dual
  5  ), table_2 AS (
  6     SELECT 'A' ID, DATE '2009-01-01' dt FROM dual UNION ALL
  7     SELECT 'C', DATE '2009-01-02' FROM dual UNION ALL
  8     SELECT 'B', DATE '2009-01-03' FROM dual
  9  )
 10  SELECT t1.ID
 11    FROM (SELECT ID, row_number() over(ORDER BY dt) rn FROM table_1) t1
 12   WHERE (ID, rn) NOT IN (SELECT ID,
 13                                 row_number() over(ORDER BY dt) rn
 14                            FROM table_2);

ID
--
B
C
0 голосов
/ 07 августа 2009

эм select id from table_1, table_2 where table_1.id = table_2.id and table_1.date <> table_2.date?

0 голосов
/ 07 августа 2009

Разве это не просто случай присоединения к дате и сравнения идентификаторов одинаковы. Предполагается, что таблица_1 является главной последовательностью.

SELECT table_1.id
FROM
  table_1
INNER JOIN table_2
    on table_1.[date] = table_2.[date]
WHERE table_1.id <> table_2.id
ORDER BY table_1.id
...