嵌套查询,在LIKE或REGEXP查询中

问题描述

| 我正在使用MysqL 5.1.34 我想使用一个临时查询,可以在其中将查询嵌套在ѭ​​0ѭ或
REGEXP
语句中。 例如:我有一个表组和表。 dept_id是组的外键。
SELECT * FROM groups WHERE name REGEXP \"[[:<:]](SELECT disTINCT dept_id FROM sheets)[[:>:]]\";
SELECT * FROM groups WHERE name like \"%(SELECT disTINCT dept_id FROM lotnumqcs)%\";
我意识到我没有在
REGEXP
中解释
|
OR
语句。这是这个问题中所包含的,我该如何解决呢?     

解决方法

        尝试一些效果...
select groups.* from groups join sheets on name regexp CONCAT(\"[[:<:]]\",dept_id,\"[[:>:]]\")
无法担保正则表达式本身,但该概念应该有效。 Like也可以这种方式使用。考虑到groups.sheets的每个值都将根据基于每个dept_id的正则表达式求值。     ,        我可能在这里错过了一些重要的事情,但是我很确定你不能做你希望的事情。 编辑 假设您正在尝试模仿定制的SELECT语法描述的功能,则可以尝试:
/* 
   set @options to regex sequence group of distinct values of sheets.dept_id

   note: for completeness,each value should be properly escaped per regex rules.
*/

SET @options=CONCAT(\'[[:<:]](\',(
      SELECT GROUP_CONCAT(did SEPARATOR \'|\') 
      FROM (SELECT DISTINCT dept_id AS did FROM sheets) AS sheetsa
),\')[[:>:]]\');

SELECT * FROM groups WHERE name REGEXP @options;
我成功使用以下方法进行了测试:
CREATE TABLE t1 (a int,b int);

INSERT INTO t1 (a,b) VALUES (0,0),(0,1),(1,1);

SET @options=CONCAT( \'[[:<:]](\',( 
      SELECT GROUP_CONCAT(tb SEPARATOR \'|\') 
      FROM (SELECT DISTINCT b AS tb FROM t1) AS ta
),\')[[:>:]]\' );

SELECT @options; /* \'[[:<:]](0|1)[[:>:]]\' */

SELECT \'0\' REGEXP @options;            /* 1 = true  */

SELECT \'1\' REGEXP @options;            /* 1 = true  */

SELECT \'2\' REGEXP @options;            /* 0 = false */

SELECT \' a ba 1 c d \' REGEXP @options; /* 1 = true  */

SELECT \' a ba1c d\' REGEXP @options;    /* 0 = false */

SELECT \' a ba 1c d\' REGEXP @options;   /* 0 = false */

SELECT \' a ba1 c d\' REGEXP @options;   /* 0 = false */

SELECT \' a ba 2 c d\' REGEXP @options;  /* 0 = false */