2010-05-29 8 views
1

J'ai les tables comme suit;Aide avec une requête SQL Server simple

  1. Employés: Nom nvarchar (50), Titre de poste nvarchar (50) et Salaire int.
  2. Employeurs: Nom nvarchar (50), Titre de poste nvarchar (50)

Je voudrais sélectionner tous les éléments de la table 'employeurs où « Titre du poste » ne montre pas dans les « Employés » table. Je sais que c'est une requête simple mais elle m'a perplexe. Je serais reconnaissant pour toute aide. Merci.

Répondre

1
select * from employers 
where jobtitle not in (select jobtitle 
    from employees 
    where jobtitle is not null); 

j'envisager d'avoir une table de travail avec les clés étrangères aux employés et aux employeurs

modifier - merci à tous pour le correctif non nul

+1

Si un employé a un titre de travail «null», cette requête retournera zéro ligne. 'x non in (nul, 'a', ...' -> 'x <> nul et x <> 'a' et ..' évalue à inconnu – Andomar

+0

Wow, juste testé que cos je ne l'avais jamais rencontré et C'est corrigé en ajoutant "where jobtitle n'est pas nul" à la sous-sélection, bien que – Blorgbeard

0

Vous pouvez utiliser une jointure:

select * 
from employers 
left join (
    select distinct jobtile 
    from employees 
) emp on employers.jobtitle = emp.jobtitle 
where emp.jobtitle is null 

L'approche d'Itchi est plus lisible, mais n'oubliez pas un where jobtitle is not null à la fin de la sous-requête :)

+0

cela ne retournera pas la sortie désirée à moins qu'il n'y ait un employeurs.jobtitle = null.Oublié une jointure gauche quelque part? –

+0

Merci pour l'aide – Bram

+0

Ne le faites pas sur un serveur SQL, ce n'est pas assez intelligent pour comprendre qu'il s'agit d'un anti-jointure. – erikkallen