У меня есть таблица MySQL, как показано ниже:

id  p_id   c_id

1   11      1

2   11      2

3   11      3

4   12      1

5   12      3

6   13      1

7   13      2

Мне нужен запрос, который, когда c_id равен 1 и 2, он должен возвращать 11 и 13 из p_id.

Я пробовал следующий запрос:

SELECT DISTINCT p_id FROM `Table Name` where c_id in (1,2)

Который возвращает: 11, 12, 13.

Но мне нужно только это вернуть: 11 , 13.

3
Yaser Darzi 27 Ноя 2016 в 10:55

4 ответа

Лучший ответ

Вы можете написать свой запрос как:

SELECT DISTINCT a.p_id 
FROM table_name AS a
JOIN table_name AS b ON a.p_id=b.p_id
WHERE a.c_id ='1' AND b.c_id ='2';

Это самосоединение на самом столе

2
Amit Gupta 27 Ноя 2016 в 08:38
SELECT DISTINCT a.p_id 
FROM table_name AS a
JOIN table_name AS b ON a.p_id=b.p_id
WHERE a.c_id ='1' AND b.c_id ='2';

Это сработало для меня

2
Rwin 12 Дек 2016 в 12:47

Ваш запрос проверяет p_ids, связанные с c_is 1 или 2. Но вам нужны 1 и 2. Вы можете написать это так:

SELECT DISTINCT t1.p_id 
FROM table_name as t1
JOIN table_name as t2
    ON t1.id = t2.id
WHERE t1.c_id = 1 AND t2.c_id = 2;
0
Henning Koehler 27 Ноя 2016 в 08:08
SELECT x.id
  FROM my_table x
 WHERE other_column IN('a','b')
 GROUP 
    BY x.id
HAVING COUNT(*) = 2;
0
Strawberry 27 Ноя 2016 в 10:47