Существует два варианта использования JOIN:
SELECT *
FROM [Database].dbo.[TagsPerItem] tpi
JOIN [Database].dbo.[Tag] t_home ON t_home.id = tpi.tagid
AND t_home.name = 'home'
JOIN [Database].dbo.[Tag] t_car ON t_car.id = tpi.tagid
AND t_car.name = 'car'
... или HAVING COUNT(DISTINCT t.name) = 2
:
SELECT --column list - fill with specific appropriate columns
FROM [Database].dbo.[TagsPerItem] tpi
JOIN [Database].dbo.[Tag] t ON t.id = tpi.tagid
AND t.name IN ('home', 'car')
GROUP BY --column list - match columns declarations with the SELECT list without aggregates used on them
HAVING COUNT(DISTINCT t.name) = 2
- Необходимо
COUNT(DISTINCT
, в противном случае два отношения "car" были бы ложно положительными (при условии, что это возможно в модели данных)
- Не все базы данных поддерживают
COUNT(DISTINCT...)
; Несмотря на то, что создание утомительно, присоединение к одной и той же таблице несколько раз является более безопасным методом