我花了点时间弄清楚我需要的SQL查询。
我有一个项目,该项目具有用户的工作室级别的用户角色,并且每个项目都有覆盖/覆盖工作室级别的角色的项目级别的角色。所有角色都是在工作室级别定义的,但是只有一些角色是在项目级别定义的(主要是与相应的工作室级别角色具有不同值的角色)
g_studio_UsersInRole
userId roleId value
1 1 TRUE
1 2 TRUE
1 3 TRUE
2 1 FALSE
g_project_UsersInRole
userId roleId value projectId
1 2 FALSE 1
2 1 TRUE 1
我需要一个查询,该查询将给定项目ID的项目角色覆盖在工作室角色上。棘手的部分是避免重复的工作室级别角色。我需要项目级别的角色(如果有)来主导。
我一直在和Union一起玩,但是我不知道如何避免重复。
基本上我需要以下结果:
userId roleId value
1 1 TRUE
1 2 FALSE
1 3 TRUE
2 1 TRUE
在哪里
如项目级别所示
我以为我与这个查询很接近,但是重复项仍然存在:
;With roles As
(
SELECT UserId, Value, RoleId
FROM dbo.g_project_UsersInRole
WHERE (ProjectId = 1)
UNION
SELECT UserId, Value, RoleId
FROM dbo.g_studio_UsersInRole)
SELECT roles.RoleId, Value, UserId
FROM roles
RIGHT JOIN (SELECT DISTINCT RoleId FROM roles) AS distinctRoles
ON distinctRoles.RoleId = roles.RoleId
您不需要工会。只需离开工作室即可加入项目,然后使用合并
以下
WITH g_studio_UsersInRole AS --Sampledata
(
SELECT 1 userId ,1 roleId , 'TRUE' value
UNION SELECT 1, 2, 'TRUE'
UNION SELECT 1, 3, 'TRUE'
UNION SELECT 2, 1, 'FALSE')
, g_project_UsersInRole as --Sampledata
(
SELECT 1 userId , 2 roleId , 'FALSE' value , 1 projectId
UNION SELECT 2, 1, 'TRUE', 1
)
SELECT
sRole.userId,
sRole.roleId,
COALESCE(pRole.Value,sRole.value) as value
FROM
g_studio_UsersInRole sRole
LEFT JOIN g_project_UsersInRole pRole
ON sRole.userId = pRole.userId
and sRole.roleId = pRole.roleId
and pRole.ProjectId = 1
返回以下结果
userId roleId value
----------- ----------- -----
1 1 TRUE
1 2 FALSE
1 3 TRUE
2 1 TRUE
我很难理解UML 2.5规范中解释的关联类的概念。最让我困惑的是取自第199页的以下句子: 注意。即使AssociationClass的所有endpoint都具有isUnique=true,也可能有多个实例将endpoint类的同一组实例关联起来。 如本文所述:https://issues.omg.org/issues/UMLR-757这一句话似乎破坏了这一概念的实用性。同时,它使几乎所有解释在U
问题内容: 我有以下代码: 当我加入ou时,我得到2个相同单位的ID。这使内部联接tblOrderServiceUnits返回4行,其中2行重复。我需要它只返回不同的2行。如何仅使用不重复到内部联接的不重复ou.id? 不好意思的解释很抱歉,但是基本上我是想看看带有不同子查询的INNER JOIN如何工作,如果有人可以给我一个例子,我可以从那里弄清楚。 问题答案: 例如:
问题内容: 以下代码适用于,它是否也返回重复的笛卡尔积,如果是,如何获得唯一的笛卡尔积? 当我传递包含列表的列表时,这似乎也不起作用 问题答案: 要仅获取唯一元素,可以使用这样的set表示法( 注意: 这不能保证顺序) 或根据Paul Draper的评论,我们可以像这样 如果您也想维护订单 要使您的程序可以使用列表列表,只需将函数声明从 至
问题内容: 我正在将SEAM 2 / Hibernate与PostgreSQL 9数据库一起使用。我有下表 我想添加一个约束,以确保每个新条目都具有active_band_user和active_band_date的唯一组合。 每秒可能有许多次尝试插入,因此我需要尽可能地提高效率,是否可以在实体映射中使用SEAM /hibernate注释? 提前致谢 问题答案: 没有Hibernate注释在插入/
问题内容: 不知道在PostgreSQL 9.3+中是否可行,但是我想在非唯一列上创建唯一索引。对于像这样的表: 我想仅能[快速]查询不同的日子。我知道我可以用来帮助执行不同的搜索,但是如果不同值的数量大大少于索引覆盖的行数,这似乎会增加额外的开销。就我而言,大约30天中有1天与众不同。 我是创建关系表以仅跟踪唯一条目的唯一选择吗?思维: 并在每次插入数据时使用触发器来更新它。 问题答案: 索引只
问题内容: 我很好奇将这种数据对象唯一化的有效方法: 对于每个数据对,左边的数字字符串加上右边的类型说明了数据元素的唯一性。返回值应为与testdata相同的列表列表,但仅保留唯一值。 问题答案: 您可以使用一组: 您还可以看到此页面,该页面对各种保留或不保留顺序的方法进行了基准测试。