0

我想检索与同一列上的一组条件匹配的所有行。但是,只有在所有条件都很好的情况下,我才想要行,如果只有一个条件失败,则没有行。例如,以这张表为例:

|id|姓名|
---------
|1 |多多|
|2 |塔塔|

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

谢谢你的支持 !干杯

4

4 回答 4

1

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

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

如果计数为 2,那么您知道两者都匹配。如果 name 不是唯一的,您可能会选择与 union 中的每个匹配的第一个 ID(选择 top 1 id ...)并计算具有外部选择的那些。

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

于 2011-11-07T05:20:41.430 回答
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
于 2011-11-07T05:36:22.680 回答
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')
于 2011-11-07T05:24:05.640 回答
0

如果name是唯一的,您可以简化为:

SELECT *
FROM   tbl
WHERE  name IN ('toto', 'tata')
AND    (SELECT count(*) FROM tbl WHERE name IN ('toto', 'tata')) > 1;

如果不是:

SELECT *
FROM   tbl
WHERE  name IN ('toto', 'tata')
AND    EXISTS (SELECT * FROM tbl WHERE name = 'toto')
AND    EXISTS (SELECT * FROM tbl WHERE name = 'tata');

或者,在 PostgreSQL、MySQL 和其他可能的情况下:

SELECT *
FROM   tbl
WHERE  name IN ('toto', 'tata')
AND    (SELECT count(DISTINCT name) FROM tbl WHERE name IN ('toto', 'tata')) > 1;
于 2011-11-07T06:14:19.007 回答