использование подстановочных знаков и ‘like’ для сравнения содержимого двух столбцов в pgSQL

#sql #postgresql #wildcard

#sql #postgresql #подстановочный знак

Вопрос:

у меня есть столбцы в двух отдельных таблицах, которые я использую при объединении и последующем обновлении. я хочу иметь возможность видеть, все ли содержимое одного столбца записано во втором столбце.

например, вот образец содержимого из каждого столбца:

 city_table1 | city_table2
Portsmouth    Portsmouth, New Hampshire, USA
  

я хочу иметь возможность иметь предложение where в операторе select, которое будет соответствовать двум столбцам на основе содержимого в city_table1 (но я не могу просто выполнить обрезку влево или вправо на основе различий в содержимом), поэтому я предполагаю что-то вроде

 where city_table1 like ('%'   city_table2 '%')
  

моя логика здесь не работает? должен ли я ссылаться на два поля в этом предложении where? я пробовал это в postgres и не получил никаких результатов, хотя я знаю, что это должно сработать, если у меня правильный синтаксис.

Спасибо!

Комментарии:

1. Примечание: Немного странно называть столбец с table инфиксом as…

2. SQL использует || для объединения строк, как и Postgres

3. о, я знаю — это фиктивные имена просто для наглядности

Ответ №1:

Postgres использует || для объединения строк. Итак:

 where city_table2 like ('%' || city_table1 || '%')
  

Кроме того, у вас есть сравнение в обратном направлении. Более короткая строка окружена '%' .

И это было бы проще с регулярными выражениями:

 where city_table2 ~ city_table1