我有这个查询工作正常。它为'Jeff'用户选择SY.UserOptions表中的行。
但是,我创建了另一个我想做同样事情的查询,但对于每个用户。所以我在查询中添加了SY.Users,实际上将2个表混合在一起。但是,它给了我一个我不理解的错误。
--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”。
我不能像这样将表格相乘并包含连接吗?
答案 0 :(得分:3)
您需要一个字段将users表加入Tasks表。
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
答案 1 :(得分:0)
这是因为您将USERS加入TaskLevels而不是Task to 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
这将为您提供用户的笛卡尔产品(任务任务级别)。因此,每个用户都将完成所有任务。
答案 2 :(得分:0)
我认为问题在于,在第二个查询中,当您加入SY.Users表和SY.TaskLevels表时,您将引用SY.Tasks表 - 它不是连接的一部分。
切换Sy.Users表和Sy.Tasks表,您的问题应该得到解决。