#sql
#sql
Вопрос:
В people
базе данных есть таблица с author_names
, на которую ссылаются из нескольких других баз данных. Имена авторов должны быть уникальными.
Не спрашивайте меня, как, но кому-то удалось создать разные записи author_names
для почти идентичных терминов. Например, есть Doe, John
(один пробел), на который указывают некоторые записи x, y, z, и другая запись для Doe, John
(два пробела), на которую указывают разные записи p, q, r.
Мы хотим очистить. Теперь мы можем использовать эквиваленты. То есть, если бы у нас был автор Doe, Johannes
, который является одним и тем же человеком als Doe, John
, мы можем сделать их эквивалентами, и все будет в порядке. (Т.е. Если вы ищете автора Doe, John, вы также получаете хиты на Doe, Johannes и наоборот.)
Проблема в том, что SQL видит Doe, John
и Doe, John
как идентичные термины. И поэтому отказывается делать их эквивалентными, потому что это нарушает требование уникальности.
Как можно обойти это (кроме ручной очистки, запись за записью)?
(Я проверил dba.stackexchange, но здесь гораздо больше о SQL.)
Комментарии:
1. Для начала вам не следует хранить имя и фамилию в одном столбце. Но yes
'a b'
считается отличным от'a b'
2. В каких ситуациях вы обнаруживаете, что «SQL видит
Doe, John and Doe, John
как идентичные термины»? Можете ли вы не обновлять записи, которые в настоящее время указывают наDoe, John
(два пробела), чтобы вместо этого указывать наDoe, John
(один пробел)? а затем удалитьDoe, John
(два пробела)?3. @a_horse_with_no_name Не могли бы вы указать, какой параметр на сервере MSSQL включает или выключает различие?
4. Для этого нет настройки. Вот как это работает «из коробки» dbfiddle.uk /…
5. @user9601310 Да, мы могли бы, но это большая ручная работа. Я ищу более разумный способ.