如何运行mysql和/或一起查询单独查询的瞬间。 e.g:
并查询:
select * form tablename where name='A' and password="A" and id='A';
或查询:
select * form tablename where name='A' or password="A" or id='A';
- 这些是2个不同的查询,我可以一起进行这些查询吗?语法是什么?
答案 0 :(得分:10)
使用括号对条件进行分组?
SELECT * FROM table WHERE (X and Y or Z) AND (P and Q or F)
答案 1 :(得分:4)
嗯,你可以加入它们但是,因为一个是另一个的子集,所以它并非绝对必要:
select * from tablename
where name = 'A' and password = 'A' and id = 'A'
union select * from tablename
where name = 'A' or password = 'A' or id = 'A'
这将为您提供完全相同的结果,就像您刚刚运行第二个查询一样。一旦您意识到第一个查询中的每一行都有name
等于'A'
,那么这将是有意义的,因此它将匹配第二个查询中where
子句的第一部分。
如果您希望在两个查询中返回的行都有重复行,请使用union all
代替union
。
如果您使用'A'
作为占位符,并且在两个查询中它的值不同,那么您有两种方法。使用如下构造:
... where (name = 'A' and password = 'B' and id = 'C')
or name = 'D' or password = 'E' or id = 'F'
或使用我上面给出的union
解决方案,例如:
select * from tablename
where name = 'A' and password = 'B' and id = 'C'
union select * from tablename
where name = 'D' or password = 'E' or id = 'F'
(当你知道时使用union all
两个查询之间不可能存在重复, - 它会为DBMS省去删除不存在的重复项的麻烦 - 事实并非如此这些查询)。
union
可以在DBMS上提供更好的性能,可以更容易地将两个选项分离到单独的查询引擎(对于复杂的单个查询而言,这将更加困难) where子句)。当然,所有的优化,衡量,不要猜测。
答案 2 :(得分:2)
目前尚不清楚您对结果的期望,但我猜你想要一个UNION:
SELECT 1 `query`, `name`, `password`, `id`
FROM `tablename` WHERE `name`='A' and `password`='A' and `id`='A'
UNION
SELECT 2 `query`, `name`, `password`, `id`
FROM `tablename` WHERE `name`='A' or `password`='A' or `id`='A'
请注意,结果中的第一列query
需要将结果与两个查询分开,因为(X和Y)和(X或Y)的并集始终是(X或Y)。
答案 3 :(得分:0)
将()
用于此类条件
select * form tablename
where name='A' OR password="A" OR id='A' OR
(name='A' AND password="A" AND id='A')
如果您想在此处检查与A
相同的字符串,那么您将使用以下查询获得相同的o / p
select * form tablename
where name='A' OR password="A" OR id='A'
答案 4 :(得分:0)
只需将条件与WHERE
SELECT * FROM tablename WHERE (name='A' AND password='A' AND id='A') OR name='A' OR password='A' OR id='A'
括号确保整个AND
表达式“验证”仅当所有包含的条件为真时,其余表达式为OR