id name father_name age
1 raja first 12
2 second first 13
当我执行以下查询时。
SELECT * FROM class WHERE name REGEXP 'first|12'
OR father_name REGEXP 'first|12'
OR age REGEXP 'first|12'
我得到了以下结果。
id name father_name age
1 raja first 12
2 second first 13
但我想在下面作为结果。
id name father_name age
1 raja first 12
如果我用或更改名称。我可以实现。但是 同时用户给予raja | 12表示
SELECT * FROM class WHERE name REGEXP 'raja|12'
OR father_name REGEXP 'raja|12'
OR age REGEXP 'raja|12'
我想要这样的结果。
id name father_name age
1 raja first 12
因为我不知道哪一个会从用户名或father_name或年龄或三者中得到。所以,如果我得到所有三个没有问题。但是当我得到单数或值数时,我需要搜索它。
是否有可能获得这些结果?
答案 0 :(得分:2)
您似乎想要and
而不是or
,但由于您似乎并不关心name
,这很复杂。我很想说:
SELECT *
FROM class
WHERE father_name REGEXP 'first|12' AND
age REGEXP 'first|12';
我不确定name
条款中WHERE
正在做什么。
编辑:
我想要你想要最匹配的行。如果是这样的话:
SELECT *
FROM class
WHERE name REGEXP 'first|12' OR
father_name REGEXP 'first|12' OR
age REGEXP 'first|12'
ORDER BY ((name REGEXP 'first|12') + (father_name REGEXP 'first|12') + (age REGEXP 'first|12')) DESC
LIMIT 1;
答案 1 :(得分:2)
请注意,REGEXP 'xx|yy'
表示this matches xx OR yy
,因此您的结果对于该查询是正确的。
要获得您想要的结果,您必须澄清您想要达到的目标。我假设您想要以下内容:select all rows where the father is first AND age is 12
您可以使用以下方法实现此目的:
SELECT * FROM mytable WHERE father_name like 'first' AND age = 12;
您可以在此处尝试此解决方案:Relevant SqlFiddle。
Edit1 :在OP发表更多评论后可能出现另类选择:
SELECT * FROM mytable WHERE
father_name IN ('first', '12') AND age IN ('first', '12')
OR
father_name IN ('first', '12') AND name IN ('first', '12')
OR
name IN ('first', '12') AND age IN ('first', '12');
您可以在此处尝试此解决方案:Relevant SqlFiddle。