Использование столбцов в RegExp в MySQL - PullRequest
9 голосов
/ 25 августа 2009

Я использую следующий запрос с regexp:

SELECT a.id, a.company, a.name, b.title, b.description, b.t_id
FROM a, b
WHERE ( b.title
REGEXP "[[:<:]]a.company[[:>:]]" OR b.description
REGEXP "[[:<:]]a.company[[:>:]]" OR b.title
REGEXP "[[:<:]]a.name[[:>:]]"  OR b.description
REGEXP "[[:<:]]a.name[[:>:]]" ) AND a.company !=  '' AND a.name !=  ''

Но этот запрос не дает ни результата, ни синтаксической ошибки.

Когда я заменяю a.company или a.name на любое из названий компаний, тогда этот запрос выполняется нормально. Почему этот запрос не работает с именами столбцов?

1 Ответ

10 голосов
/ 25 августа 2009

Вы ищете буквенную строку a.company, а не столбец. Попробуйте это:

SELECT a.id, a.company, a.name, b.title, b.description, b.t_id
FROM a, b
WHERE 
    ( 
        b.title REGEXP concat('[[:<:]]', a.company, '[[:>:]]') 
        OR b.description REGEXP concat('[[:<:]]', a.company, '[[:>:]]') 
        OR b.title REGEXP concat('[[:<:]]', a.name, '[[:>:]]')
        OR b.description REGEXP concat('[[:<:]]', a.name, '[[:>:]]')
    ) 
    AND a.company !=  '' AND a.name !=  ''

Это обеспечивает regexp значением столбца, а не строки 'a.company'. Поскольку я предполагаю, что вы хотите сравнить значение столбца (а не имя столбца), вам необходимо объединить ваши regexp вместе.

Вы можете проверить это с помощью этого запроса:

select
    'My col: a.company' as Test1,
    'My col: ' + a.company as Test2
from
    a

Здесь Test1 всегда будет значением My col: a.company, а Test2 будет My col: <company col value here>.

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