我正在使用MySQL 5.1.34
我想使用Ad Hoc查询,我可以在LIKE
或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)%";
我意识到我没有考虑|
中的OR
,REGEXP
语句。这包含在这个问题中,我该如何解释?
答案 0 :(得分:0)
我可能会遗漏一些重要的东西,但我很确定你不能做你希望的事情......
修改
假设您正在尝试模拟您定制的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,0),(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 */
答案 1 :(得分:0)
尝试一下......的效果。
select groups.* from groups join sheets on name regexp CONCAT("[[:<:]]",dept_id,"[[:>:]]")
不能保证正则表达式本身,但这个概念应该有效。喜欢也可以这种方式使用。考虑group.sheets的每个值将根据每个dept_id的正则表达式进行评估。