Как выбрать строки, у которых есть 1 общий столбец, но другой столбец должен удовлетворять 2 условиям в MySQL - PullRequest
0 голосов
/ 08 июля 2020

Эта задача меня немного сбивала с толку, даже озаглавить этот вопрос было сложно. Уже пробовал с ответами в этот вопрос , но не применяется в моем случае, потому что мне нужно получить что-то конкретное c из COL2 («P C» и «PP»).

Мне нужно получить все строки, где COL2 соответствует 2 условиям = 'P C' OR 'PP'. Как в примере.

МОЯ ТАБЛИЦА:

ID    COL1    COL2
1      100     PC •     
2      100     PP •     
3      100     PF 
4      200     PP   
5      200     PF    
6      300     PC •   
7      300     PP •  

ЖЕЛАЕМЫЙ ВЫВОД:

ID    COL1    COL2
1      100     PC •     
2      100     PP •      
6      300     PC •   
7      300     PP •  

Ответы [ 2 ]

4 голосов
/ 08 июля 2020

Этот запрос:

select col1
from tablename
where col2 in ('PC', 'PP')
group by col1
having count(distinct col2) = 2

возвращает все col1 s, которые вы хотите, и вы можете использовать его с оператором IN:

select * from tablename
where col2 in ('PC', 'PP')
and col1 in (
  select col1
  from tablename
  where col2 in ('PC', 'PP')
  group by col1
  having count(distinct col2) = 2
)

См. демо . Результатов:

| ID  | COL1 | COL2 |
| --- | ---- | ---- |
| 1   | 100  | PC   |
| 2   | 100  | PP   |
| 6   | 300  | PC   |
| 7   | 300  | PP   |
2 голосов
/ 08 июля 2020

Вы можете использовать этот код:

SELECT a.* FROM (
SELECT *
FROM `table` WHERE col2 = 'pc'
UNION 
SELECT *
FROM `table` 
WHERE col2 = 'pp' AND col1 IN (SELECT col1
FROM `table` WHERE col2 = 'pc')
) a
ORDER BY a.col1 ASC, a.col2 ASC

Вот результат вашего желания: введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...