我在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
时,此查询运行正常。为什么此查询不能与列名一起使用?
答案 0 :(得分:10)
您正在搜索文字字符串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>
。