Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql中基于条件的子查询输出_Mysql_Sql_Subquery_Conditional_Inner Query - Fatal编程技术网

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
without
ALL
将返回两部分的
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