Mysql выбрать все строки, соответствующие заданным критериям, и другие строки с тем же идентификатором, что и выбранные строки - PullRequest
0 голосов
/ 21 мая 2019

Скажите, у меня есть эта таблица:

enter image description here

В таблице много строк, а DimCombinationID идентифицирует строки, принадлежащие к той же группе строк.

Я хочу сделать выбор с использованием типа где: где (Dimension = 1 AND DimensionValue = 13) И (Dimension = 5 AND DimensionValue = 15), который должен извлечь все строки, имеющие DimCombinationID, равный 22 и 56, потому что они соответствуют оба требования:

enter image description here

Я перепробовал все виды вещей, но это объясняет большинство из того, что я получаю неправильно:

Выберите DimCombinationID из TESTDimCombination, где (DimID = 1 И DimValueID = 13) ИЛИ (DimID = 5 И DimValueID = 15)

Это получит DimCombinationID 22, 39 и 56. Так что все. В то время как только 22 и 56 соответствуют обоим критериям, а 39 не должно быть в ответе БД.

Если у меня есть только нужные 22 и 56, я хочу обернуть этот запрос во внешний запрос, который получает все столбцы для всех строк, имеющих DimCombinationID 22 или 56.

Я думаю, что мне нужно что-то делать с подсчетом или подсчетом, но я не могу понять это.

Любая помощь или мысли о том, как это сделать, будет принята с благодарностью ..... Я не могу обернуться вокруг этого.

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 22 мая 2019

При этом:

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.
См. Демоверсию .
Результаты:

| 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         |
0 голосов
/ 22 мая 2019

Не вижу функциональной разницы между принятым ответом и следующим:

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)
...