SQL获取符合所有条件的行

时间:2011-11-07 05:09:31

标签: sql having-clause

我想在同一列上检索与一组条件匹配的所有行。但是,如果所有条件都良好,我想要行,如果只有一个条件失败,则不需要行。 例如,拿这个表:

|id|name|
---------
|1 |toto|
|2 |tata|

我希望能够要求“tata”&& “toto”在此表中。但是当询问“tata”和“tuto”是否存在时,如果其中一个参数不在表中,我想要一个空的响应,例如询问“toto”&& “tutu”包括在表中。 我怎样才能做到这一点 ? 我目前正在为每个参数做一个查询,这不是很有效。我尝试了几个解决方案,包括一个子选择或一个组+,但没有人像我想的那样工作。

感谢您的支持! 欢呼声

3 个答案:

答案 0 :(得分:1)

这有点模糊。如果名称是唯一的,则可以计算与where子句匹配的匹配行:

where name='toto' or name='tata'

如果计数为2,那么你知道两者都匹配。如果name不是唯一的,您可以选择与union中的每个匹配的第一个ID(选择top 1 id ...),并使用外部select选择。

即使您有任意数量的名称要匹配,您也可以使用任何用于构建select语句的顶级语言创建存储过程或代码。

答案 1 :(得分:1)

这不是最有效的方法,但这个查询可行。

SELECT * FROM table_name 
WHERE (name = 'toto' OR name = 'tata') 
AND ( SELECT COUNT(*) FROM table_name WHERE name = 'toto') > 0 
AND ( SELECT COUNT(*) FROM table_name WHERE name = 'tata') > 0

答案 2 :(得分:0)

SELECT 1 AS found FROM hehe
WHERE 1 IN (SELECT 1 FROM hehe WHERE name='tata')
  AND 1 IN (SELECT 1 FROM hehe WHERE name='toto')