2013-02-25 4 views
0

Учитывая эти две таблицы:Проверьте, есть ли дети, существуют

позиции (positionid, positiontext, reportstopositionid)

пользователя (идентификатор пользователя, positionid)

Как я могу проверить, если пользователь имеет подчиненных в одном запросе? Возможно ли это?

Подчиненный: пользователя (а) с positionid имеет, по меньшей мере, один или несколько подчиненных, если существует все пользователи (б) с positionid пользователя (а) в качестве reportstopositionid для пользователей (б), соответствующего positionid

+0

Что такое подчиненный? Все ли пользователи в состоянии сообщают всем пользователям в позиции ординат? – SWeko

+1

Вы хотите только проверить, есть ли у пользователя подчиненные ?, а не список всех подчиненных? – Lamak

+0

@SWeko: пользователь (a) с позицией имеет по крайней мере одно или несколько подчиненных, если есть какие-либо пользователи (b) с позицией пользователя (a) в качестве отчета для пользователя (b) соответствующей позиции – sjallamander

ответ

1

как насчет этого?

SELECT DISTINCT a.* 
FROM user a 
     INNER JOIN position b 
      ON a.userID = b.reportstopositionID 

запись, возвращаемая этот запрос являются те, которые имеют соответствующие идентификаторы userid на position таблицы в колонке reportstopositionID

1

Я думаю, что вы хотите сделать это с помощью пункта where:

select u.* 
from user u 
where u.positionId in (select reportstopositionid from position p) 

Этих получает список пользователей, которые соответствуют, без дубликатов.

+0

userid не соответствует positionid – sjallamander

+0

@sjallamander. , , Это всегда помогает прояснить отношения в вопросе. –

2

Это будет возвращать пользователей, которые имеют подчиненных:

SELECT * 
FROM User u 
WHERE EXISTS (
      SELECT 1 
      FROM Position p 
      WHERE p.reportstopositionid = u.positionid 
     ) 
Смежные вопросы