2009-02-19 61 views
1

我有这个查询,工作正常。它为'Jeff'用户选择SY.UserOptions表中的行。高级SQL INSERT

但是,我创建了另一个查询,我想要做同样的事情,但为每个用户。于是我将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 

--Here是误差

消息4104,级别16,状态1,过程CreateUserOptions,线15 多部分标识符 “t.Application” 不能被约束。 消息4104,级别16,状态1,过程CreateUserOptions,行15 无法绑定多部分标识符“t.Task”。 消息4104,级别16,状态1,过程CreateUserOptions,行15 无法绑定多部分标识符“t.DftAccessLevel”。

我可以不像表一样将表相加并包含连接吗?

+1

我认为你需要一个更好的问题标题,这与插入无关,当然不是高级的 – 2009-02-19 21:15:38

回答

0

我想问题是,在第二个查询中,当您加入SY.Users表和SY.TaskLevels表时,您引用的是SY.Tasks表 - 这不是连接的一部分。

切换Sy.Users表和Sy.Tasks表,并且问题应该修复。

3

您需要一个字段将用户表加入到任务表中。

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

这是因为您将用户加入到TaskLevels而不是任务到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 

这会给你的用户的笛卡尔积用,但(任务TaskLevels)。所以每个用户都会有各种任务。