mysql中基于条件的子查询输出
下面是我的疑问:mysql中基于条件的子查询输出,mysql,sql,subquery,conditional,inner-query,Mysql,Sql,Subquery,Conditional,Inner Query,下面是我的疑问: 从表1中选择c1、c2、c3、c4、c5,其中c1=0//条件1 和c2=“abc”//条件2 和c3=“xxx”//条件3 c4=5//条件4 这里我们知道,条件2将应用于条件1给出的结果数据,条件3将应用于条件2和1给出的结果数据,类似地,条件4将应用于 我想要的查询将进一步执行,如果任何条件之间失败意味着如果条件3不会给出任何结果(或空结果集),则我的条件4将应用于空结果集,因此最终输出将为空,但我希望如果条件3不会给出任何结果(或空结果集),则条件4“应应用”到条件
从表1中选择c1、c2、c3、c4、c5,其中c1=0//条件1
和c2=“abc”//条件2
和c3=“xxx”//条件3
c4=5//条件4
这里我们知道,条件2将应用于条件1给出的结果数据,条件3将应用于条件2和1给出的结果数据,类似地,条件4将应用于 我想要的查询将进一步执行,如果任何条件之间失败
意味着如果条件3不会给出任何结果(或空结果集),则我的条件4将应用于空结果集,因此最终输出将为空,但我希望如果条件3不会给出任何结果(或空结果集),则条件4“应应用”到条件2和1返回的结果集 在这里,由于性能问题,我无法更改条件的顺序 请用疑问引导我 试试这个
select c1, c2, c3, c4, c5 from table1 where (c1 =0) or (c2="abc") or (c3="xxx") or (c4 = 5)
据我所知,您希望有条件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筛选的临时表,并对该数据子集应用进一步的逻辑。我得到了一个简单的解决方案,它在我的场景中工作。此外,我还能够减少在大数据上执行查询的时间。很显然,将执行两个查询,但我找到了合适的解决方案 我使用了简单的联合查询 从表1中选择c1、c2、c3、c4、c5,其中c1=0//条件1
和c2=“abc”//条件2
和c3=“xxx”//条件3
c4=5//条件4
联合
从表1中选择c1、c2、c3、c4、c5,其中c1=0//条件1
和c2=“abc”//条件2
c4=5//条件4
如果其他人有更准确和适当的解决方案。请发布。我认为样本数据和所需的信息将对理解您的工作有很大帮助。您的解释也不正确:SQL不能保证表达式的求值顺序。结果集只是保证
where
子句的计算结果为true。@GordonLinoff我处理的是一个有行的表,所以我不能根据最小化数据的条件给您提供示例数据。但我希望您理解我的问题。有没有其他方法可以从中获得所需的输出..这里我处理的是一个有行的表,所以根据条件我将最小化我的数据,所以如果我使用OR,它将产生性能问题,因为查询将花费太多时间来执行…@Karthika:虽然这段代码可以回答这个问题,最好解释一下它是如何解决问题的,以及为什么要使用它。从长远来看,纯代码答案没有用处。您的解决方案看起来是可行的,但您是对的。。。查询的执行时间太长了。Union
您编写它的方式只会产生第二部分的不同的。@Y.B.您能用任何例子解释一下吗。到目前为止,我所面临的问题正由工会解决。如果您能为我提供更好的解决方案,我将不胜感激。您的联合体的第二部分缺少条件3
。因此,联合的第二部分将获取第一部分中选择的所有行,以及不满足条件3的行UNION
withoutALL
将返回两部分的DISTINCT
记录列表。由于第一部分是第二部分的一个子集,UNION
相当于第二部分的DISTINCT
。试试看:,表1作为(从(值((0),('abc'),('xxx'),(5),(1)),((0),('abc'),(0),('abc'),('xxx'),(6),(3)),选择c1,c2,c3,c4作为(c1,c2,c3),c3,表1中的c5,其中c1=0--条件1和c2='abc'--条件2和c3='xxx'--条件3和c4=5--条件4并集从表1中选择c1、c2、c3、c4、c5,其中c1=0--条件1和c2='abc'--条件2和c4=5--条件4