Используя стержень и UNPIVOT если версия базы данных> = Oracle 11,2
WITH table1(username,data_usage,cost) AS (
SELECT 'user1', 50, 159 FROM dual UNION ALL
SELECT 'user2', 250, 376 FROM dual UNION ALL
SELECT 'user3', 150, 225 FROM dual),
table2(username,user1,user2,user3) AS (
SELECT 'data_usage', 50, 200, 150 FROM dual UNION ALL
SELECT 'cost', 159, 376, 225 FROM dual)
---
--End of data preparation
---
select tb.username || ' has different values column name data usage '|| tb.data_usage ||' at first table and '|| ta.data_usage ||' at table2' as text
from (select *
from table2
unpivot (val for users in (user1 as 'user1', user2 as 'user2', user3 as 'user3'))
pivot (min(val) for username in ('data_usage' as data_usage, 'cost' as cost))) ta
join table1 tb on (username = users)
WHERE ta.data_usage <> tb.data_usage;
Ouput:
| TEXT |
|----------------------------------------------------------------------------------------|
| user2 has different values column name data usage 250 at first table and 200 at table2 |
Просто используйте этот запрос
select tb.username || ' has different values column name data usage '|| tb.data_usage ||' at first table and '|| ta.data_usage ||' at table2' as text
from (select *
from table2
unpivot (val for users in (user1 as 'user1', user2 as 'user2', user3 as 'user3'))
pivot (min(val) for username in ('data_usage' as data_usage, 'cost' as cost))) ta
join table1 tb on (username = users)
WHERE ta.data_usage <> tb.data_usage;
Заменить table1 и таблица2 с именами таблиц
, если я должен написать выберите Постулаты для каждой записи Thats будет бесполезно сог я имел около 1 млн записей Thats как раз пример того, что я хочу – sam
Не сочтите часть выше «Конец подготовки данных» как часть запроса, это делается для того, чтобы избежать создания физической таблицы на моем конце. Используйте только более позднюю часть (т. Е. После «Конец подготовки данных») и замените таблицы 1 и таблицу 2 на свои имена таблиц. – San
http://sqlfiddle.com/#!4/623b6 – sam