2012-08-08 71 views
1

我有一个有“X1,X2,X3,X4,X5”字符串(逗号部分字符串)的字段。 让我们例如MySQL的表 -MySQL Tricky正则表达式

id FIELD1 
1 X1,X3 
2 X1,X3,X4 
3 X2,X3,X4 
4 X2,X4 
5 X1,X3,X4,X5,X6 

让Q = “X1,X3,X4,X5”

现在,什么是查询以获得其中FIELD1值的所有字符都包含在q行Q是这样的,只有8个字符(X1,X2 ..),字符串中的字符不会重复。

Select id FIELD WHERE "...Some regex on characters of Q...." 

换言之, 它应该返回,行1,2作为X1,X3,存在于Q. X4它不应该返回行3,4,5作为X2,X6不存在Q中。

谢谢你这么多

+1

您的数据库结构违反了第一条规范化规则。你最好重新设计你的数据库。 – 2012-08-08 09:47:52

+0

数据库已经存在,所以我现在不能改变它:(你能告诉我如何得到结果吗? – 2012-08-08 09:56:00

+0

我完全同意@juergend,你应该正确使用数据库,而不是搜索一半的解决方案 – 2012-08-08 09:58:33

回答

0

正如克林斯曼d说我之前,你的数据库结构发生了故障。

如果你采用这种结构,丑陋的SQL查询,你会得到如下:

SELECT id FROM Crooked_Table WHERE (FIELD1 LIKE '%X1%' OR FIELD1 LIKE '%X3%' OR FIELD1 LIKE '%X4%' OR FIELD1 LIKE '%X5%') AND NOT (FIELD1 LIKE '%X2%' OR FIELD1 LIKE '%X6%') 

你还需要支付查询中的所有可能的逗号分隔值,否则赢了没有工作。

+0

谢谢,Uri,它工作。 – 2012-08-08 16:26:51