2016-09-16 4 views
-2

Допустим, у меня 3 таблицы называетсяSQL присоединение 3 таблицы

UID | User | Task 

UID пользователя и имеют отношения Рк и присоединиться на UID.crossuserid = User.crossuserid (то же значение) пользователя и задачи имеют отношения Fk и присоединиться на User.UserID = Task.UserID

как бы запросить так что у меня есть параметр на поле в задаче, а затем я присоединяюсь три таблицы, а затем возвращать поля, например, имя пользователя из UID

I попробовал это, и не удивительно, что он не работал

Select username 
FROM UID 
inner join User 
ON UID.crossuserid = User.crossuserid 
inner join Task 
ON User.UserID = Task.UserID 
WHERE task.tasktypeid = '3' 
+4

Что означает 'it did not work'. Можете ли вы дать образец? – Jens

+2

какой rdbms вы используете? – swe

ответ

0

Попробуйте это:

SELECT UID.USERNAME 
FROM UID 
LEFT JOIN USER 
ON UID.CROSSUSERID = USER.CROSSUSERID 
LEFT JOIN TASK 
ON USER.USERID = TASK.USERID 
WHERE TASK.TASKTYPEID = '3' 
0

Вы должны включить псевдоним для каждой таблицы, вы присоединиться к:

Select i.username 
FROM UID i 
inner join User u 
ON i.crossuserid = u.crossuserid 
inner join Task t 
ON u.UserID = t.UserID 
WHERE t.tasktypeid = '3' 
0

user является SQL ключевое слово. Попробуйте [User] и посмотрите, работает ли это.

Кроме того, inner является типом соединения по умолчанию. Вам не нужно включать это. Итак:

SELECT username FROM UID JOIN [User] ON UID.crossuserid = [User].crossuserid JOIN Task ON [User].UserID = Task.UserID WHERE task.tasktypeid = '3'

Как уже упоминалось Hasan, это всегда хорошая идея, чтобы попытаться присоединиться к левой, чтобы убедиться, что вы не пытаетесь присоединиться к нулевой строки. Внутренние соединения отбрасывают результаты, когда одна таблица не имеет соответствующей записи.

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