select
name_id
from
YourTable
where
term_id = 4 or term_id = 6
group by
name_id
having
count(*) = 2
чтобы уточнить, что что вам нужно понять, «GROUP BY »и« HAVING ». Группировать, заставляя SQL-запрос группировать как можно больше квалифицированных записей по столбцам, которые он идентифицирует как предложение Group By. Это просто один и тот же столбец в запросе.
Далее, предложение HAVING основано на окончательных результатах группы после того, как все записи предварительно подготовлены и включены. В этом случае он смотрит на COUNT (*) записей, которые имеют квалификацию = 2.
Поскольку вы заинтересованы в том, чтобы данный идентификатор Name_ID был связан с BOTH Условиями 4 и 6, нам нужны имена, где их идентификатор был найдено в BOTH ... Следовательно, условие OR условия WHERE. Нам нужна любая запись, в которой лицо было связано с 4 ИЛИ 6. Если в результате была найдена только одна запись (только 4 или 6), их значение COUNT () было бы равно 1 и, таким образом, было отброшено из набора результатов ... только те, которые квалифицироваться с обоих терминов будет иметь счетчик () = 2 и, таким образом, включены в окончательные результаты ...
Чтобы увидеть, что в противном случае она может выглядеть, попробуйте этот запрос ...
select
name_id,
count(*) as TotalTermsPerName
from
YourTable
group by
name_id
Вы получите идентификатор имени с минимальным сроком 1 год и другие, которые могут иметь 10 терминов или более на основе ваших данных. Поскольку исходный запрос учитывал только термины 4 и 6, максимальный счет, который должен быть достигнут, должен быть не более 2.
Надеюсь, что это поможет вместо ответа на запрос и не понимает основы того, КАК вещи Работа.
, который является «или» заявление, но я хочу некоторые например, показать мне имя id с 4 и 6 не или 4 или 6, потому что если он помещает 4 и 6 и 2, он не должен показывать мне ничего –
Это возвращает имя_ид для двух строк с одинаковыми именами_ид и term_id как 4, '(1,4,2), (2,4,2) '. Это неправильно. – Ishtar