我正在使用以下查询regexp:
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使用任何公司名称时,此查询运行良好。为什么此查询不适用于列名?
a.company
a.name
您正在搜索文字字符串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在一起。
'a.company'
您可以使用以下查询对此进行测试:
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>。
Test1
My col: a.company
My col: <company col value here>