在mysql中输出基于条件的子查询

时间:2015-12-17 11:57:21

标签: mysql sql subquery conditional inner-query

以下是我的询问:

从table1中选择c1,c2,c3,c4,c5,其中c1 = 0 //条件1
AND c2 =“abc” //条件2
AND c3 =“xxx” //条件3
AND c4 = 5 //条件4

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

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

意味着如果条件3 没有给出结果(或无结果集)那么我的条件4 将应用于空结果集,因此最终输出将为null,但我想如果条件3 将不给出结果(或空结果集),那么条件4 “应该应用”到结果集返回条件2和1

由于性能问题,我无法改变条件顺序。

请指导我查询。

3 个答案:

答案 0 :(得分:0)

试试这个

myModelsList

答案 1 :(得分: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上过滤的临时表,并将更多逻辑应用于此数据子集。

答案 2 :(得分:0)

我有一个简单的解决方案,它在我的场景中工作。此外,我还可以减少查询执行大数据的时间。确切地说,将执行两个查询,但我找到了这个正确的解决方案。

我使用简单的Union查询。

从table1中选择c1,c2,c3,c4,c5,其中c1 = 0 //条件1
AND c2 =“abc” //条件2
AND c3 =“xxx” //条件3
AND c4 = 5 //条件4
UNION
从table1中选择c1,c2,c3,c4,c5,其中c1 = 0 //条件1
AND c2 =“abc” //条件2
AND c4 = 5 //条件4

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