【发布时间】:2009-02-03 17:34:45
【问题描述】:
我正在构建一个查询,该查询自然会返回一个结果,该结果具有多个列的值,以及一些整数值分组列(指示特定值列是否被小计,但这本身与我的问题无关)。我想对这个查询的分组列施加一个约束,如果所有分组列 1 - (n-1) 只接受分组列 n 非零的行也是非零的。
似乎应该有一个很好的方式来用 SQL 来表达这一点,但到目前为止我能想到的只是相当麻烦
where ((grp1 = 0 AND grp2 = 0 AND grp3 = 0 AND ... AND grpn = 0)
or (grp1 = 1 AND grp2 = 0 AND grp3 = 0 AND ... AND grpn = 0)
or (grp1 = 1 AND grp2 = 1 AND grp3 = 0 AND ... AND grpn = 0)
...
or (grp1 = 1 AND grp2 = 1 AND grp3 = 1 AND ... AND grpn = 1)
如果您正在阅读它,则更难理解这个概念,看起来 SQL 引擎更难进行体面的优化,并且通常也会阻塞日志,掩埋重要的部分噪音中的 SQL。
由于这个概念似乎并不太不寻常,我希望有一种更好的方式来表达它,这种方式通常会更简洁,并希望在服务器本身上性能更高(假设我的幼稚版本不会高效)。
【问题讨论】:
-
根据您提供的信息,Ben 的解决方案似乎是正确的,但是如果您提供问题的完整描述(架构、完整 SQL 等),那么有人可能会为您提供更好的从不同的方向看问题的解决方案。
-
是 (n) 一个变量,还是架构中的一个固定(但很大)值?
标签: sql