2015-03-20 2 views
0
SELECT * FROM training.dbo.[PERSON] P 
LEFT JOIN training.dbo.PERSON_CAREER_HISTORY PC ON (P.PERSON_ID=PC.PERSON_ID) 
CROSS JOIN (SELECT DISTINCT PC2.POSITION training.dbo.PERSON_CAREER_HISTORY) PC2 
WHERE PC.POSITION IS NULL 

la pièce de jointure croisée ne fonctionne pas donnant l'erreur "Syntaxe incorrecte près de '.'."SQL: requête de jointure croisée

Je ne peux pas le réparer et le réparer pendant environ une heure. S'il vous plaît dites-moi mon erreur

+3

Il n'y a pas FROM dans la sous-requête. – jarlh

Répondre

0

Vous avez manqué le FROM dans le CROSS JOIN.

SELECT * FROM training.dbo.[PERSON] P 
LEFT JOIN training.dbo.PERSON_CAREER_HISTORY PC ON (P.PERSON_ID=PC.PERSON_ID) 
CROSS JOIN (SELECT DISTINCT PC2.POSITION FROM training.dbo.PERSON_CAREER_HISTORY) PC2 
WHERE PC.POSITION IS NULL 
0

Vous avez manqué le mot clé FROM de la sous-requête. Essayez ceci:

SELECT 
    * 
FROM 
    training.dbo.[PERSON] P 
    LEFT JOIN training.dbo.PERSON_CAREER_HISTORY PC 
     ON (P.PERSON_ID=PC.PERSON_ID) 
    CROSS JOIN (
     SELECT DISTINCT 
      PC2.POSITION 
     FROM 
      training.dbo.PERSON_CAREER_HISTORY) PC2 
WHERE 
    PC.POSITION IS NULL 
0

Si vous êtes à la recherche pour les postes que les gens ne pas ont, alors c'est la requête que vous voulez:

SELECT * 
FROM training.dbo.[PERSON] P CROSS JOIN 
    (SELECT DISTINCT PC2.POSITION FROM training.dbo.PERSON_CAREER_HISTORY 
    ) pp LEFT JOIN 
    training.dbo.PERSON_CAREER_HISTORY PCH 
    ON P.PERSON_ID = PC.PERSON_ID AND pp.POSITION = PC.POSITION 
WHERE PC.POSITION IS NULL; 

Les join s ne sont pas correctes dans votre version (ainsi que le problème avec la sous-requête). Sinon, je ne peux pas comprendre le but de votre requête d'origine.