Вопрос о SQL-запросах - PullRequest
1 голос
/ 29 июня 2011

У меня есть три таблицы в БД MySQL

В таблице 1 есть следующие поля

Name of Table: SupervisorTable 
supervisorid (autoinc, bigint) 
employeeid (bigint) //same as User.userid
supervisorname

Name of Table: User 
userid (autoinc, bigint) 
userFullName (string) 
supervisorid (bigint) 
divisionid (bigint)

Name of Table: DivisionTable 
divisionid(autoinc, bigint) 
divisionname (string)

Я хочу иметь возможность определить, в каком отделе работает руководитель, и мой выводимя руководителя и название подразделения.Моя последняя попытка:

SELECT supervisortable.supervisorname,
       divisiontable.divisionname 
  FROM supervisortable, 
       user, 
       divisiontable 
 WHERE supervisortable.employeeid = user.userid;

Это дало каждую комбинацию имени руководителя с каждым отделом:

supervisorname  divisionname
----------------------------
UserA           Department1
UserB           Department1
UserA           Department2
...
UserB           DepartmentN

Ответы [ 3 ]

3 голосов
/ 29 июня 2011

Если вы хотите запрос, который находит всех супервизоров и перечисляет желаемый результат в вашем OP, то он сделает это:

SELECT S.supervisorname,
       D.divisionname
  FROM SuperisorTable S
  JOIN User U ON S.employeeid= U.supervisorid
  JOIN DivisionTable D ON U.divisionid = D.divisionid

Потому что без критериев вы получаете декартово произведение (это плохо, если вы действительно не хотите этого).

0 голосов
/ 29 июня 2011

Я правильно понимаю вашу структуру данных:

SELECT 
  S.supervisorname,        
  D.divisionname 
FROM SuperisorTable S  
INNER JOIN Users U ON S.employeeid = U.userid  
INNER JOIN DivisionTable D ON U.divisionid = D.divisionid 
0 голосов
/ 29 июня 2011
SELECT s.supervisorname, d.divisionname
FROM DivisionTable d, SupervisorTable s, User u
WHERE d.divisionid =  u.divisionid
AND s.supervisorid = u.supervisorid
AND s.employeeid = u.userid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...