SQL查询中根据表值添加条件

Posted

技术标签:

【中文标题】SQL查询中根据表值添加条件【英文标题】:Add condition in SQL query based on table value 【发布时间】:2019-06-03 15:42:24 【问题描述】:

我使用 oracle 作为我的数据库。我想在基于表数据的 sql 查询中添加条件。在表中,如果 CT_GENERAL 为 1,那么我想在我的 sql 查询中添加另一个条件。(CST_GENERAL = USER ARGUMENT)。

从 ch_caseinfo 中选择 * 其中 ct_general = 1 时的情况 然后 cst_general = %3 结束

%3 = 资金

//表结构 //CH_CASEINFO

音量 ID | CT_ADVERSE | CT_GENERAL | CT_HA | CT_MI | CST_GENERAL | CST_MI

149634          0          0          0          0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
161077          0          0          0          0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
161147          0          1          0          1 Funding          Composition/ingredients                                                                                                                                                                                                                                        
161268          0          1          0          0 Funding                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
161306          0          1          0          0 Manufacturing                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
240131          0          1          1          0 Funding                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
239364          0          0          0          0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
239364          0          0          0          0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
147434          0          0          0          0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
147466          0          0          0          0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
158990          0          1          0          1 Funding          Administration                                                                                                                                                                                                                                                 

 98863          1          1          1          1 Funding          Disposal                                                                                                                                                                                                                                                       
159757          1          1          1          1 Funding          Disposal                                                                                                                                                                                                                                                       
 98863                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
191039          1          1          0          0 Other                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
 97007          0          0          0          0     

ORA-00905: 缺少关键字 00905. 00000 - “缺少关键字”

【问题讨论】:

【参考方案1】:

当您不想包含过滤器(CT_GENERAL 为 0)时,您需要形成 where 子句来评估为真的表达式。考虑下面的示例,如果 ct_general = 0,则 cst_general 将始终等于 cst_general(除非 null -- 如果有可能,则需要容纳 null)。

SELECT *
FROM ch_caseinfo
WHERE CASE WHEN ct_general = 0 THEN cst_general ELSE USERARGUMENT END = cst_general
    AND OTHERCRITERIA = CRITERIA

【讨论】:

以上是关于SQL查询中根据表值添加条件的主要内容,如果未能解决你的问题,请参考以下文章

用于从 N 记录的其他表值更新值的 SQL 查询

SQL Server:表值函数不适用于子查询

在 T-SQL 查询的 SELECT 子句中使用表值函数的“语法不正确”

mybatis_动态SQL

SQL 在OPENQUERY中使用参数,并作为表查询对象/不允许使用远程表值函数调用。

sql更新怎么根据条件查询到了更新没有匹配到的数据不更新