0

下面是我的查询:

select c1, c2, c3, c4, c5 from table1 where c1 =0 //Condition 1
AND c2="abc" //Condition 2
AND c3="xxx" //Condition 3
AND c4 = 5 / /Condition 4

在这里,我们知道条件 2 将应用于条件 1 给出的结果数据,条件 3 将应用于条件 2 和 1 给出的结果数据,类似地,条件 4 将应用于......

如果两者之间的任何条件失败,我想要查询将进一步执行。

意味着如果条件 3不会给出结果(或空结果集),那么我的条件 4将应用于空结果集,因此最终输出将为空,但我希望条件 3不会给出结果(或空结果集)然后条件 4 “应该应用”到条件 2 和 1返回的结果集。

由于性能问题,在这里我无法更改条件顺序。

请指导我查询。

4

3 回答 3

0

尝试这个

select c1, c2, c3, c4, c5 from table1 where (c1 =0) or (c2="abc") or (c3="xxx") or (c4 = 5)
于 2015-12-17T12:01:51.647 回答
0

据我所知,您希望条件 3是可选的。这可以做到,但几乎不是一个有效的解决方案:

Select c1, c2, c3, c4, c5
From table1
Where c1 = 0
  AND c2 = "abc"
  AND (c3 = "xxx"
       OR NOT Exists (Select '*' From table1 Where c1 = 0 AND c2 = "abc" AND c3 = "xxx")
      )
  AND c4 = 5

更好的方法可能是使用根据条件 1 和 2 过滤的临时表,并将进一步的逻辑应用于此数据子集。

于 2015-12-17T13:13:55.683 回答
0

我有一个简单的解决方案,它在我的场景中工作。此外,我还能够减少对我的大数据执行查询的时间。肯定会执行两个查询,但我找到了这个正确的解决方案。

我使用了简单的联合查询。

select c1, c2, c3, c4, c5 from table1 where c1 =0 //Condition 1
AND c2="abc" //Condition 2
AND c3="xxx" //Condition 3
AND c4 = 5 //Condition 4
UNION
select c1, c2, c3, c4, c5 from table1 where c1 =0 //条件 1
AND c2="abc" //条件 2
AND c4 = 5 //条件 4

如果其他人有更准确和正确的解决方案。请张贴。

于 2015-12-17T14:17:42.680 回答