Я думаю, вы могли бы получить решение в одном запросе, используя операторы case и несколько вложенных запросов, но прежде чем я пойду туда, я не уверен, что следую тому, что вы пытаетесь выполнить. Предположим, что следующий примерный набор данных:
ID House_Number Street_Name Zip_Code
=============================================
1 3012 Elm 10010
2 412 9th 10010
3 412 Main 90210
4 710 Main 60606
Также предположим следующий вызов метода, передавая почтовый индекс, имя и номер дома:
MatchAddress('10010', 'Main', '710')
Что бы вы хотели вернуть в этом случае? Ваша подпись имеет единственную переменную out для позиции несоответствия, но этот пример будет частично соответствовать всем четырем записям, включенным по крайней мере в один элемент. Что бы вы хотели вернуть для записи 1, например, где есть совпадение по почтовому индексу, но не по атрибутам house_number или street_name?
======================================
ОК, видел ваш комментарий. Вот вопрос, который, я думаю, находится на правильном пути для вас. Предложение WHERE - это серия OR, которые возвращают любую запись, которая соответствует хотя бы одному из критериев. Затем оператор case смотрит, где они не равны переданному значению. Очевидно, что наименее конкретное совпадение является субъективным, но вы можете переупорядочить оператор case, чтобы установить желаемые критерии соответствия в нужном вам порядке. Я работал здесь над базой данных MySQL.
SELECT address.*, CASE
WHEN zip_code <> '10010' THEN 'No match on Zip'
WHEN street_name <> 'Elm' THEN 'No match on Street Name'
WHEN house_number <> '29' THEN 'No match on House Number'
ELSE 'Match on all elements'
END AS zip_match
from address
where zip_code = '10010'
OR street_name = 'Elm'
OR house_number = '29'
Я заставил его вернуть некоторые довольно многословные утверждения для ясности здесь, но вы, очевидно, могли бы, чтобы он возвращал числовой код или что-то еще, что имеет смысл для вас. Это также не учитывает такие проблемы, как чувствительность к регистру. Как написано, он также ищет точное совпадение регистра. В зависимости от вашей среды БД или того, как хранятся ваши данные, вам может потребоваться решить эту проблему, если вы этого не хотите.