我们有这张桌子和一些数据
在某些情况下,我们需要获取具有属性的实体,这些实体具有特殊的值,而该属性本身并不重要。
问题是我们要获得具有值等于1的属性并且还具有值为2的属性的实体
以简单的方式,我们需要这样的东西:
从表中选择Entity_Id,其中值= 1和值= 2
此查询未返回任何内容,因为“值”列仅具有1个值^ _ ^
其实我们需要这样的东西
SELECT Entity_Id FROM表
GROUP BY Entity_Id
具有值= 1和值= 2
MsSql不支持此查询,您必须使用聚合函数。OTL
因为在这种情况下,您在Value列上设置的所有过滤器都可以将第一个查询解析为以下形式:
SELECT
DISTINCT Entity_Id,
(SELECT COUNT(*) FROM table WHERE Value = 1 and Order_Id = outerTable.Order_Id)
*
(SELECT COUNT(*) FROM table WHERE Value = 2 and Order_Id = outerTable.Order_Id) as xxx
FROM table AS outerTable
目前,我要做的是获取第一个查询谓词并将其解析为第三种形式的查询。
编辑:在第一个查询上设置的过滤器是可选的,并且由用户发送,不知道背景结构,他认为所有属性都保存为该实体的列,这就是为什么我将AND解析为
(subQry(过滤器1)* subQry(过滤器2)* .... * subQry(过滤器N))
或者
(subQry(过滤器1)+ subQry(过滤器2)+ ..... + subQry(过滤器N))
寻找更好的解决方案^ _ ^“
提前致谢。
除了已经提到的其他答案之外,还有两种其他方法:
select entity_id from table where value = 1
intersect
select entity_id from table where value = 2
select t1.entity_id from table t1
join table t2 on t1.entity_id = t2.entity_id
where t1.value = 1 and t2.value = 2
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句