Присоединение к PostgreSQL с использованием LIKE / ILIKE - PullRequest
9 голосов
/ 22 сентября 2010

Я пытаюсь сделать неточное объединение (я не уверен, каков правильный термин), где я мог бы выполнить сопоставление с образцом. По сути, вместо того, чтобы делать JOIN, как это:

.... JOIN .... ON (t1.col = t2.col)

Я хотел бы сделать что-то вроде:

.... JOIN .... ON (t1.col ILIKE %(t2.col)% )

Второй пример явно не соответствует синтаксису. Есть ли способ сделать что-то подобное?

Ответы [ 2 ]

22 голосов
/ 22 сентября 2010
.... JOIN .... ON t1.col ILIKE '%' || t2.col || '%'

Обратите внимание, что, как написано, AFAIK, PostgreSQL не сможет использовать какие-либо индексы для ускорения обработки объединения.

15 голосов
/ 22 сентября 2010

Альтернативным способом присоединения к «является значение t2.col подстроки t1.col»:

... AS t1 JOIN ... AS t2 ON POSITION(t2.col IN t1.col)<>0

Здесь по-прежнему нельзя использовать индексы, но преимущество в том, что вам не нужно беспокоиться о % и _ символах в t2.col, которые в противном случае начали бы совпадать со всеми.

Если вам нужно сопоставление без учета регистра, например ILIKE, и вы не используете citext, вам нужно LOWER() оба столбца, прежде чем использовать POSITION().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...