2015-11-18 3 views
0

У меня есть следующие данные в MySQL таблицы package_in_planВыбор конкретных строк несколько значений с одинаковым идентификатором

+------------+----------+------+ 
| package_id | plan_id | opt | 
+------------+----------+------+ 
| 4   | 9  | 0 | 
| 35  | 9  | 0 | 
| 8   | 9  | 0 | 
| 8   | 4  | 0 | 
| 4   | 4  | 0 | 
| 4   | 16  | 0 | 
| 5   | 15  | 0 | 
+------------+----------+------+ 

Я хочу, чтобы быть в состоянии выбрать package_id 4 и 8 и выход должен быть plan_id 4 ТОЛЬКО. Я не хочу, чтобы он выводил plan_id 9, потому что plan_id 9 имеет package_id 35, для которого plan_id 4 не так, я хочу, чтобы он был конкретным, что эти запрошенные package_id одинаковы для plan_id.

Это мой SQL, к которому я пришел до сих пор, и застрял оттуда.

Select * from package_in_plan where package_id in(4,8) group by plan_id having count(*) >1; 

И, конечно, этот не работает. Цените помощь.

+1

вы близки, это должно быть 'HAVING COUNT (DISTINCT package_id) = 2' так как вы ищете только 2 пакета –

ответ

0

Это будет работать:

Select * 
from package_in_plan 
where package_id in(4,8) 
    AND plan_id NOT IN (SELECT plan_id FROM package_in_plan where package_id not in (4,8)) 

Получить все данные с package_id как 8 или 4, и игнорирует те, которые имеют plan_id с package_id в отличие от 8 или 4.

Если и может передать другую переменную к запросу сделайте, как @John Woo сказал

Select * 
from package_in_plan 
where package_id in(4,8) 
group by plan_id 
having COUNT(distinct package_id) = @num (how many packages you want) 
+0

Отлично! Работаю как шарм. Цените помощь, еще один вопрос, если это возможно. Например, скажем, теперь я хочу искать package_id в (4,8,35), как я могу выводить только 9 и игнорировать 4. Этот ответ дает мне как 9, так и 4. Если используется 4,8,35. –

0

Вы можете сделать только оператор AND, or.

Select * from package_in_plan WHERE plan_id=4 AND (package_id=4 OR package_id=8); 
+0

Проблема, нужен ли ему plan_id 4, потому что plan_id 9 имеет package_id = 35, не относящийся к этому пакету, таким образом вы делаете работу только для этого примера. –

+0

Точно как @TiagoOliveiradeFreitas Это решает только мой пример. –

Смежные вопросы