mysql和or一起查询

时间:2010-07-13 05:31:55

标签: mysql

如何运行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个不同的查询,我可以一起进行这些查询吗?语法是什么?

5 个答案:

答案 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