У нас есть система на базе Oracle, которая управляет устройствами и сохраняет их данные и конфигурацию в таблице, называемой «configs». Каждое устройство состоит из нескольких модулей, и конфигурация каждого модуля сохраняется как строка, разделенная запятыми. Например:Запрос Oracle: сравнение значений в таблице с другими значениями в одной таблице
device_id module values
1 1 3,4,2,3
1 2 4,1,3,4
1 3 2,1,2,3
1 4 6,4,2,1
1 5 1,4,2,3
1 6 1,3,4,4
2 1 3,4,2,3
2 2 4,1,3,4
2 3 2,3,2,3
2 4 6,4,2,1
2 5 1,8,2,3
2 6 1,3,4,4
3 1 3,4,2,3
3 2 4,1,3,4
3 3 2,1,2,3
3 4 6,4,2,1
3 5 1,4,2,3
3 6 1,3,4,4
4 1 3,4,2,3
4 2 4,1,3,4
4 3 2,1,2,4
4 4 6,4,2,1
4 5 1,4,2,3
4 6 1,3,7,4
Мне нужно провести аудит системы и определить каждый модуль, конфигурация которого не соответствует известной хорошей конфигурации. В идеале, я хочу, чтобы выполнить запрос, как это, предполагая, что конфигурации для устройства 1 мой хороший конфиг:
select device_id,module
from configs
where values != (select values from configs where device_id = 1)
Но это возвращает ошибку:
ORA-01427: single-row subquery returns more than one row
Если изменить запрос к этому, он работает:
select device_id,module
from configs
where values = (select values from configs where device_id = 1 and module = 1);
Но тогда я должен выполнить запрос для каждого значения «модуля».
Что бы я хотел сделать, это написать запрос, который позволит мне сделать это за один раз. Было намечено, что я могу использовать оператор курсора, но я изо всех сил пытался найти статью типа «оракулы для манекенов», и ничего, на что я смотрел, помог мне до сих пор, включая http://docs.oracle.com/cd/B28359_01/server.111/b28286/expressions006.htm#SQLRF52057. Может кто-нибудь что-то предложить?
Спасибо.
, как вы определяете, что «известный хороший конфиг» есть? – OldProgrammer
В принципе, все конфиги должны быть одинаковыми, но со временем все было переделано. Мы знаем, что конфигурация устройства 1 - это то, что должны быть все остальные. – Darren