说我有这张桌子:
该表中有很多行,其中DimCombinationID标识属于同一行组的行。
我想用以下方式进行选择:where(Dimension = 1 AND DimensionValue = 13)AND(Dimension = 5 AND DimensionValue = 15),这应该检索所有DimCombinationID为22和56的行,因为它们满足这两个要求:
我尝试了各种方法,但这可以解释大多数我错误得到的东西:
从TESTDimCombinations中选择DimCombinationID,其中(DimID = 1 AND DimValueID = 13)或(DimID = 5 AND DimValueID = 15)
这将获得DimCombinationID 22、39和56。虽然只有22和56满足这两个条件,但39不应满足数据库的响应。
一旦我只有所需的22和56,我想将此查询包装到外部查询中,该查询将获取具有DimCombinationID 22或56的所有行的所有列。
我认为我需要做些具有或具有计数的事情,但我似乎无法弄清楚。
任何有关此操作的帮助或想法都将不胜感激.....
谢谢!
答案 0 :(得分:1)
与此:
select *
from TESTDimCombinations
where DimCombinationID in (
select DimCombinationID
from TESTDimCombinations
where (DimID = 1 AND DimValueID = 13) OR (DimID = 5 AND DimValueID = 15)
group by DimCombinationID
having count(*) = 2
);
子查询:
select DimCombinationID
from TESTDimCombinations
where (DimID = 1 AND DimValueID = 13) OR (DimID = 5 AND DimValueID = 15)
group by DimCombinationID
having count(*) = 2
获得DimCombinationID
的22和56。
请参见demo。
结果:
| DimCombinationID | DimID | DimValueID |
| ---------------- | ----- | ---------- |
| 22 | 1 | 13 |
| 22 | 2 | 9 |
| 22 | 5 | 15 |
| 22 | 2 | 2 |
| 56 | 1 | 13 |
| 56 | 2 | 17 |
| 56 | 5 | 15 |
| 56 | 2 | 51 |
答案 1 :(得分:0)
我认为接受的答案与以下内容没有功能上的区别:
SELECT DISTINCT x.*
FROM TESTDimCombinations x
JOIN TESTDimCombinations y
ON y.DimCombinationID = x.DimCombinationID
WHERE (DimID = 1 AND DimValueID = 13)
OR (DimID = 5 AND DimValueID = 15)