Eu tenho duas mesas
1ª Tabela: center
(2 colunas)
+-----------------------------------+
|id | company_name |
+-----------------------------------+
|2 | Skytel Outsourcing Pvt. Ltd. |
+-----------------------------------+
2ª Tabela: campaign_center
(3 colunas)
+-------------------------------------+
|campaign_id | Center_id | sl_no |
+-------------------------------------+
|Demo | 2 | 2 |
+-------------------------------------+
|MyFootPath | 2 | 3 |
+-------------------------------------+
Quando executo esta consulta está funcionando perfeitamente: (Para encontrar center_id
e nome da empresa quem campaignid
é 'Demo'
)
select center.id, center.company_name
from center
inner join campaign_center
on center.id = campaign_center.center_id
where campaign_center.campaign_id = 'Demo'
mas, novamente, quando estou tentando encontrar a empresa que campaign_id
não é 'Demo'
, ela não fornece a saída correta:
select center.id, center.company_name
from center
inner join campaign_center
on center.id = campaign_center.center_id
where campaign_center.campaign_id != 'Demo'
Como faço para conseguir isso? Por favor ajude.
Sua segunda consulta fornecerá todas as empresas que possuem (um ou mais) centros de campanha com id diferente de
'Demo'
. Mas aqueles que tiverem um'Demo'
e algum outro ID de campanha ainda serão incluídos.Eu acho que você quer algo diferente. Para encontrar aquelas empresas que nenhuma delas
campaign_id
é'Demo'
. Nesse caso, você precisa de um anti-semijoin (geralmente chamado de anti-join) que pode ser obtido comNOT IN
ou aLEFT JOIN / IS NULL
ou umaNOT EXISTS
consulta: