2009-08-25 19 views
8

一個RegExp使用列我使用下面的查詢與regexp在MySQL的

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.companya.name時,此查詢運行良好。爲什麼這個查詢不適用於列名?

回答

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>

+3

您正在使用MySQL不支持的MS SQL Server字符串連接語法。請使用以下語法:'CONCAT('[[:<:]]',a.company,'[[:>:]]')' – 2009-08-25 05:03:38

+0

謝謝Eric,謝謝Bill!老實說,我在大家的幫助下學習了很多東西。再次感謝stackoverflow及其所有成員:-) – developer 2009-08-25 09:29:42