高级SQL INSERT

时间:2009-02-19 20:37:18

标签: sql tsql

我有这个查询工作正常。它为'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”。

我不能像这样将表格相乘并包含连接吗?

3 个答案:

答案 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表,您的问题应该得到解决。