我想在同一列上检索与一组条件匹配的所有行。但是,如果所有条件都良好,我想要行,如果只有一个条件失败,则不需要行。 例如,拿这个表:
|id|name| --------- |1 |toto| |2 |tata|
我希望能够要求“tata”&& “toto”在此表中。但是当询问“tata”和“tuto”是否存在时,如果其中一个参数不在表中,我想要一个空的响应,例如询问“toto”&& “tutu”包括在表中。 我怎样才能做到这一点 ? 我目前正在为每个参数做一个查询,这不是很有效。我尝试了几个解决方案,包括一个子选择或一个组+,但没有人像我想的那样工作。
感谢您的支持! 欢呼声
答案 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')