使用 IF ... THEN ... ELSE 在两个 SELECT 查询之间进行选择

Posted

技术标签:

【中文标题】使用 IF ... THEN ... ELSE 在两个 SELECT 查询之间进行选择【英文标题】:Using IF … THEN … ELSE to choose between two SELECT queries 【发布时间】:2013-01-11 08:40:48 【问题描述】:

我需要有关我将调用“app_Update_Users”的应用程序中的 SELECT 语句的帮助。此应用程序旨在更新用户表中的记录。应用代码参考下表:

国家 县 组织 用户

States 表包含美国所有 50 个州的列表。 Counties 表包含加利福尼亚州 58 个县的列表。组织表包含可能位于任何州并在加利福尼亚州的一个或多个县提供服务的组织列表。添加或更新用户记录时,我想根据组织所在的州和提供服务的县过滤组织列表。

应用程序具有三个选择类型语句来创建用户记录中的属性选择列表。我已经编写了适用于前两个语句的代码,但是我遇到了第三个语句的代码问题。这些语句引用的字段是: - uState - u县 - u组织

uState 和 uCounty 字段的语句调用 onChange Ajax 处理来更新 uOrganization 字段的选择列表中的选择。使用以下代码选择前两个字段的选项列表选项:

对于 uState 字段:

SELECT stAbbr, CONCAT(stAbbr, ' - ', stStatePK)
   FROM States 
   ORDER BY stAbbr;

对于 uCounty 字段:

SELECT cCounty, cCounty 
   FROM Counties 
   ORDER BY cCounty;

Organizations 表中的记录可以在 oCounties 字段中列出多个县,因为一个组织可以在多个县开展业务。因此,当前使用以下代码选择 uOrganization 字段的选项列表选项:

SELECT oName
   FROM Organizations 
   WHERE oCounties LIKE '%uCounty%' 
   ORDER BY oName ASC ;  

我还可以使用以下代码根据它们所在的状态选择 Organizations 表中的记录:

SELECT oName, oName
   FROM Organizations 
   WHERE oState = 'uState' 
   ORDER BY oName ASC ;

但是,我想用于为 uOrganization 字段选择选项的逻辑将结合这两个代码 sn-ps。用简单的英语,它会是这样的:“如果 uState 字段设置为 'California',则根据 uCounty 字段中的值从 Organizations 表中选择记录。如果 uState 字段未设置为 'California' ,然后根据 uState 字段中的值从 Organizations 表中选择记录。

下面的 IF 。 . .然后 。 . . ELSE 语法明白了这一点,但它不起作用:

IF uState = 'CA' THEN
   SELECT oName, oName
   FROM Organizations 
   WHERE oCounties LIKE '%uCounty%' 
   ORDER BY oName ASC ;  
ELSE
   SELECT oName, oName
   FROM Organizations 
   WHERE oState = 'uState' 
   ORDER BY oName ASC ;
ENDIF

编写此代码的正确方法是什么?

【问题讨论】:

【参考方案1】:

您可以在没有if 的情况下使用单个语句来做到这一点:

SELECT oName, oName
FROM Organizations 
WHERE (ustate = 'CA' and oCouties like '%uCounty%') or
      (uState <> 'CA' and oState = 'uState')
ORDER BY oName ASC ;

【讨论】:

此代码生成此错误消息:“访问数据库时出错:'where 子句'中的未知列 'ustate'” 应用程序显然将此代码解释为 uState 是 Organizations 表中的列.但是,它是用户表中的一列。有什么建议吗?【参考方案2】:

可以在 where 条件下使用 if 语句

SELECT 
    oName, 
    oName
FROM Organizations 
WHERE 
    IF(uState = 'CA' , oCounties LIKE '%uCounty%' , oState = 'uState'  )
ORDER BY oName ASC ;

【讨论】:

以上是关于使用 IF ... THEN ... ELSE 在两个 SELECT 查询之间进行选择的主要内容,如果未能解决你的问题,请参考以下文章

if-then-else 运算符的短路评估(例如 ?: 在 C 中)

JSON Schema 是不是可以使用引用外部属性的 if/then/else

Pandas 使用 If/Then/Else 语句在循环中抛出错误

使用 IF ... THEN ... ELSE 在两个 SELECT 查询之间进行选择

postgresql中使用if else语句

您可以在 SQL 中使用 if-then-else 逻辑吗? [复制]