2016-05-04 2 views
0

Я использую базу данных Access и нуждаюсь в помощи, конвертируя следующий вложенный запрос во внутренний запрос соединения.Преобразование подзапроса в стандартный запрос с использованием INNER JOIN синтаксиса

DIRNUM является основным ключом в таблице DIRECTOR, а также находится в таблице MOVIE. MVNUM является первичным ключом в таблице MOVIE и таблице MOVSTAR.

SELECT dirname 
FROM director 
WHERE dirnum IN (SELECT dirnum 
       FROM movie 
       WHERE mvnum IN (SELECT mvnum 
            FROM movstar 
            WHERE starnum=2) 
       ); 
+0

PLS формат сообщения лучше. – gdlmx

ответ

1
SELECT 
    dirname 
FROM 
    (director d 
INNER JOIN 
    movie m ON m.dirnum = d.dirnum) 
INNER JOIN 
    movstar ms ON ms.mvnum = m.mvnum 
WHERE 
    ms.starnum=2 

EDIT: Измененный добавить скобки как указал HansUp

+1

[Доступ требует скобок в предложении FROM для запросов, которые включают более одного соединения.] (Http://stackoverflow.com/a/20929533/77335) – HansUp

+0

T Хэнкс, я не знал об этом. ;) –

2

Вы хотите выбрать отличный (так как вы не используете "WHERE IN" синтаксис, вы получите дубликаты)

SELECT DISTINCT dirname 
FROM 
    (director d 
INNER JOIN 
    movie m ON m.dirnum = d.dirnum) 
INNER JOIN 
    movstar ms ON ms.mvnum = m.mvnum 
WHERE 
    ms.starnum=2 
Смежные вопросы