问题描述
|
我正在使用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 */