MySQL选择符合给定条件的所有行以及与所选行具有相同ID的其他行

时间:2019-05-21 20:55:01

标签: mysql select group-by

说我有这张桌子:

enter image description here

该表中有很多行,其中DimCombinationID标识属于同一行组的行。

我想用以下方式进行选择:where(Dimension = 1 AND DimensionValue = 13)AND(Dimension = 5 AND DimensionValue = 15),这应该检索所有DimCombinationID为22和56的行,因为它们满足这两个要求:

enter image description here

我尝试了各种方法,但这可以解释大多数我错误得到的东西:

从TESTDimCombinations中选择DimCombinationID,其中(DimID = 1 AND DimValueID = 13)或(DimID = 5 AND DimValueID = 15)

这将获得DimCombinationID 22、39和56。虽然只有22和56满足这两个条件,但39不应满足数据库的响应。

一旦我只有所需的22和56,我想将此查询包装到外部查询中,该查询将获取具有DimCombinationID 22或56的所有行的所有列。

我认为我需要做些具有或具有计数的事情,但我似乎无法弄清楚。

任何有关此操作的帮助或想法都将不胜感激.....

谢谢!

2 个答案:

答案 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)
相关问题