2013-11-16 2 views
1

мне нужно запросить рекурсивный ключ в одной таблицеSQL Query - Как запросить рекурсивный ключ

Стол:

instructor_id

instructor_name

mentor_id

проблема

mentor_id имеет рекурсивный внешний ключ

В некоторых записях есть тот же mentor_id.

Как я могу обратиться к этой таблице?

мне нужно вывести все инструктора, которые Дугие

+0

@Sebas, что можно сделать в хранимой процедуре, которая не может быть выполнена за пределами одного? – OGHaza

+0

@Tom, не могли бы вы объяснить 'Некоторые поля имеют тот же mentor_id.' пожалуйста? Вы имели в виду 'Некоторые записи имеют тот же mentor_id'? – Sebas

+1

Да, это неправильно. Некоторые записи имеют одинаковый идентификатор. Я получил свой ответ на эту проблему! – Bob21

ответ

2

Это все преподаватели, которые наставничество кого

SELECT instructor_id, instructor_name 
FROM instructors 
WHERE instructor_id IN (SELECT mentor_id FROM instructors) 

EDIT: Если вы хотите, чтобы все наставнические отношения

SELECT i.*, m.instructor_name AS mentor_name 
FROM instructors i 
    JOIN instructors m ON m.instructor_id = i.mentor_id 
+0

Будет ли это классифицироваться как подзапрос? Также мне нужно поставить тех, кого инструктируют, в рамках одного и того же запроса, это можно сделать? – Bob21

+0

Да. Это подзапрос (но не коррелированный подзапрос). –

+0

@Tom, возможно, несколько человек наставляются. Вам нужна одна строка для каждого инструктора, который является наставником, или один ряд для каждого наставника? –

0

Альтернативы использования вложенного запроса является INNER JOIN:

SELECT DISTINCT t1.* 
FROM yourTable t1 
INNER JOIN yourTable t2 ON t1.instructor_id = t2.mentor_id 
+0

«более эффективный, чем вложенный запрос» (A) Зависит от вложенного запроса (B) SQL является декларативным. Планировщики запросов могут делать все, что хотят получить правильный результат. С хорошим планировщиком запросы с одинаковыми результатами будут иметь одинаковый план запросов. –

+0

Привет. Я не уверен, что вы использовали t1 и t2. Могли бы вы объяснить? – Bob21

+0

't1' и' t2' - это псевдонимы таблицы. Вам не нужно их менять. –

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