2015-03-20 4 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 

кросс-соединение не работает, давая ошибку «Неправильный синтаксис рядом с.».SQL: запрос на перекрестный запрос

Я не могу это исправить и фиксировал его примерно на час. Сообщите мне свою ошибку

+3

В подзапросе нет ОТ. – jarlh

ответ

0

Вы пропустили FROM в 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

Вы пропустили ключевое слово FROM из подзапроса. Попробуйте это:

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

Если вы ищете позиции, которые люди делают не есть, то это запрос, который вы хотите:

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; 

В join s не правильно в вашей версии (а также проблема с подзапросом). В противном случае я не могу понять цель вашего исходного запроса.

Смежные вопросы