无法从我的特定查询(数据库设计或代码问题)获取SQL结果

时间:2016-09-02 14:45:11

标签: sql sql-server database-design

我一直在与这个查询作斗争,要么我错过了我的WHERE子句,要么我没有这个设计权。我已尝试过一些连接以及操作,但我只能在那里中途。所以我想我会把问题提交给社区。

背景。三张桌子。 (我正在简化以简化查询)。一个表是用户(人)的列表。用户可以属于ZERO或更多城市(城市)。

人员和城市的表格合并在一个列出所有用户及其所属城市的视图中。注意,用户不需要属于此视图中存在的城市或。组合时的视图包含以下字段:

vwListingUsersCity

userID
username
cityID

示例视图数据如下所示

1 person1   NULL
2 person2   1
2 person2   2
3 person3   1
4 person4   5
5 person5   7
6 person6   NULL

等......你明白了

现在问题是我正在向另一个名为job的表写一个查询。一个人可以被分配到一个城市的工作,但他们不必被分配一个城市来找工作。 CityID指的是一个独特的城市(为简单起见,纽约,波士顿等等。例如,忽略了同名城市可能是不同的地方的想法。)

作业架构是以下真正的基础:

JobTable
JobID (unique)
JobName

JobUserTable
UserJob_ID (PK identity)
CityID
UserID
JobID
DateEntered

etc...  a unique index of cityID, UserID is set. (you cant have more than one job at the same city for a user)

sample data of JobUserTable

1  NULL  1  1  sampledate
2  1     2  1  sampledate
3  4     3  2  sampledate

我正在通过UserID将vwListingUsersCity加入JobUserTable。我想要一份没有分配工作的用户列表。这很简单,但由于用户可能属于多个城市,因此无法显示第二个作业(例如,第2个人在city1中有一个作业,他们不会在查询中显示他们不会&# 39;在city2工作

SELECT dbo.vwListingUsersCity.username, dbo.vw_ListUsersNoRole1.cityID
FROM            dbo.vwListingUsersCity LEFT OUTER JOIN
             dbo.JobUserTable ON dbo.vwListingUsersCity.ID =        dbo.JobUserTable.User_ID
WHERE        (dbo.JobUserTable.User_ID IS NULL)

所以这很好地显示了在分配角色时不存在的用户,但在上面的示例中,因为已经在city1分配了作业的用户person2将不会显示在查询中,表示他们没有在city2分配角色。

所以我的WHERE子句或其他东西需要更强大。查询需要返回没有为他们所做或不属于的任何城市分配工作的用户。

我不确定这是否可行,我设计它的方式,任何反馈都表示赞赏。

谢谢大家。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您需要一份他们没有工作的所有用户和城市的列表。如果这是正确的,我首先要在城市和用户之间进行完全加入,以返回所有用户和所有城市的列表。然后外部连接到作业表ON(tempAll.UserID = jobs.UserID AND tempAll.CityID = jobs.CityID)以返回不匹配的记录。