如何解决嵌套查询,在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 */
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。