Расширенный SQL INSERT - PullRequest
       7

Расширенный SQL INSERT

1 голос
/ 19 февраля 2009

У меня есть этот запрос, который отлично работает. Он выбирает строки в таблице SY.UserOptions для пользователя «Джефф».

Однако я создал еще один запрос, по которому хочу сделать то же самое, но для каждого пользователя. Поэтому я добавил в запрос SY.Users, который фактически умножает две таблицы вместе. Тем не менее, это дает мне ошибку, которую я не понимаю.

--This works
SELECT ‘Jeff’, t.Application, t.Task, tl.Description
FROM SY.Tasks t
LEFT OUTER JOIN SY.TaskLevels tl 
ON t.Application = tl.Application And t.Task = tl.Task AND t.DftAccessLevel = tl.AccessLevel

-- This does not work
SELECT u.[User], t.Application, t.Task, tl.Description
FROM SY.Tasks t, SY.Users u
LEFT OUTER JOIN SY.TaskLevels tl 
ON t.Application = tl.Application And t.Task = tl.Task AND t.DftAccessLevel = tl.AccessLevel

- вот ошибка

Сообщение 4104, уровень 16, состояние 1, процедура CreateUserOptions, строка 15 Многоэлементный идентификатор t.Application не может быть связан. Сообщение 4104, уровень 16, состояние 1, процедура CreateUserOptions, строка 15 Многоэлементный идентификатор "t.Task" не может быть связан. Сообщение 4104, уровень 16, состояние 1, процедура CreateUserOptions, строка 15 Не удалось связать идентификатор из нескольких частей «t.DftAccessLevel».

Разве я не могу так умножить таблицы и включить объединение?

Ответы [ 3 ]

3 голосов
/ 19 февраля 2009

Вам необходимо поле для присоединения таблицы пользователей к таблице задач.

SELECT u.[User], t.Application, t.Task, tl.Description
FROM SY.Tasks t
INNER JOIN SY.Users u --LEFT OUTER if it makes a difference
  ON t.user = u.User --not sure if these fields are available maybe some type of userId?
LEFT OUTER JOIN SY.TaskLevels tl 
  ON t.Application = tl.Application 
  And t.Task = tl.Task AND t.DftAccessLevel = tl.AccessLevel
0 голосов
/ 19 февраля 2009

Мне кажется, проблема в том, что во втором запросе, когда вы соединяете таблицу SY.Users и таблицу SY.TaskLevels, вы ссылаетесь на таблицу SY.Tasks, которая не является частью объединения.

Поменяйте местами таблицу Sy.Users и таблицу Sy.Tasks, и ваша проблема должна быть решена.

0 голосов
/ 19 февраля 2009

Это потому, что вы присоединяете ПОЛЬЗОВАТЕЛЕЙ к TaskLevels вместо Tasks к TaskLevels.

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

SELECT u.[User], t.Application, t.Task, tl.Description
FROM SY.Users u, SY.Tasks t
LEFT OUTER JOIN SY.TaskLevels tl ON t.Application = tl.Application And t.Task = tl.Task AND t.DftAccessLevel = tl.AccessLevel

Это даст вам декартово произведение пользователей с (Tasks TaskLevels). Так что у каждого пользователя будет каждое задание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...