我有一个包含以下结构和示例数据的表:
现在我想查询value
等于#
和@
的记录。
例如,根据上面的图片,它应该返回1
和2
id
-----
1
2
此外,如果参数为@
,#
和$
,则应该为1
提供参数。因为只有标识为1
的记录具有所有给定值。
id
-----
1
答案 0 :(得分:5)
您可以使用一个组,并且必须获取包含您正在寻找的项目数量的独特计数的不同ID
SELECT Id
FROM Table
WHERE Value IN ('#','$')
GROUP BY Id
HAVING COUNT(DISTINCT Value) = 2
SELECT Id
FROM Table
WHERE Value IN ('#','$','@')
GROUP BY Id
HAVING COUNT(DISTINCT Value) = 3
SQL Fiddle您可以使用此链接进行测试
答案 1 :(得分:2)
有几种方法可以做到这一点。
子查询方法:
SELECT DISTINCT Id
FROM Table
WHERE Id IN (SELECT Id FROM Table WHERE Value = '@')
AND Id IN (SELECT Id FROM Table WHERE Value = '@');
相关子查询方法:
SELECT DISTINCT t.Id
FROM Table t
WHERE EXISTS (SELECT 1 FROM Table a WHERE a.Id = t.Id and a.Value = '@')
AND EXISTS (SELECT 1 FROM Table b WHERE b.Id = t.Id and b.Value = '#');
INTERSECT方法:
SELECT Id FROM Table WHERE Value = '#'
INTERSECT
SELECT Id FROM Table WHERE Value = '@';
最佳性能取决于RDBMS供应商,表的大小和索引。并非所有RDBMS供应商都支持所有方法。
答案 2 :(得分:1)
也许像这样多人自我加入?
select
distinct t1.id
from
table t1
join table t2 on (t1.id=t2.id)
join table t3 on (t1.id=t3.id)
...
where
t1.value='@' and
t2.value='#' and
t3.value='$' and
...