mysql多where子句不起作用

mysql多where子句不起作用,mysql,Mysql,基于此表 key sampleID rs A1 A2 1 12345 rs123 C C 2 12345 rs345 C C 3 11110 rs123 C C 4 11110 rs345 C A 此声明 SELECT sampleID FROM QS_base

基于此表

 key    sampleID     rs         A1       A2  
 1     12345       rs123      C        C
 2     12345       rs345      C        C
 3     11110       rs123      C        C
 4     11110       rs345      C        A
此声明

SELECT sampleID 
FROM QS_base 
WHERE (rs = 'rs123' AND A1 = 'C' AND A2 = 'C') 
OR (rs = 'rs345' AND A1 = 'C' AND A2 = 'C')
SELECT sampleID 
FROM QS_base 
WHERE (rs = 'rs123' AND A1 = 'C' AND A2 = 'C') 
AND (rs = 'rs345' AND A1 = 'C' AND A2 = 'C')
返回

12345
12345
11110
这句话呢

SELECT sampleID 
FROM QS_base 
WHERE (rs = 'rs123' AND A1 = 'C' AND A2 = 'C') 
OR (rs = 'rs345' AND A1 = 'C' AND A2 = 'C')
SELECT sampleID 
FROM QS_base 
WHERE (rs = 'rs123' AND A1 = 'C' AND A2 = 'C') 
AND (rs = 'rs345' AND A1 = 'C' AND A2 = 'C')
不返回任何记录。我希望它会回来

 12345
 12345

为什么它不返回任何结果,并且有没有一种方法可以写入它以获得上述结果

您正在寻找的样本中,rs同时为'rs123'和'rs345'。查询只单独查看行。

在第二个示例中,您有排除条件。where条款:

WHERE (rs = 'rs123' AND A1 = 'C' AND A2 = 'C')  AND (rs = 'rs345' AND A1 = 'C' AND A2 = 'C')
云可以写为:

WHERE rs = 'rs123' AND rs = 'rs345' AND A1 = 'C' AND A2 = 'C'
在同一时间,rs不能等于rs123和rs345:

至于你问题的第二部分,是的,它当然可以返回你需要的结果。只要写下:

WHERE (rs = 'rs123' AND A1 = 'C' AND A2 = 'C')
我假设您对此查询有其他要求,如果有,请在您的帖子中说明。

并且需要同时满足这两个条件,并且无法找到具有两个不同条件的行

您可以使用出口来执行此操作


您可以使用group by获得您想要的,并拥有:


它不会返回,因为您同时使用AND运算符,单行不能同时具有值rs='rs123'和rs='rs345'。如果需要不同的值,请在选择中使用不同的值。联合也是一个不错的选择。@CoderofCode谢谢,但不会使用不同的值删除重复项?您已更新了输出。在第一次输出时,您需要单个值,这就是为什么使用DIstinct。您可以查看删除重复项的@Gordon或@Abhik应答器,但我需要它来满足这两个条件,即子句必须是AND而不是or。您可以使用IN子句。但您不能仅基于RS、A1和A2列筛选提供的表。值的组合是相同的。是小提琴的例子。@gungu。having子句确保两个条件都满足。非常好,戈登,谢谢你指出这一点。您的查询实际上是最快的。其目的是返回所有列sampleID,其中列rs、A1和A2与指定的模式匹配。此操作有效。非常感谢。现在假设我想匹配一个额外的条件,例如rs='rs678'和A1='C'和A2='C',你能提供一个示例吗?pls必须添加另一个,并在末尾as AND exists从QS_base t3中选择1,其中t1.sampleID=t3.sampleID和t3.rs='rs678'和t3.A1='C'和t3.A2='C'