簡體   English   中英

在MySQL中的RegExp中使用列

[英]Using Columns in a RegExp in MySQL

我正在使用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.companya.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連接在一起。

您可以使用此查詢對此進行測試:

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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM