4

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

  • 状态
  • 组织
  • 用户

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

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

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 字段选择选项的逻辑将结合这两个代码片段。用简单的英语,它会是这样的:“如果 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

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

4

2 回答 2

5

您可以在没有ifwith 单个语句的情况下执行此操作:

SELECT oName, oName
FROM Organizations 
WHERE (ustate = 'CA' and oCouties like '%{uCounty}%') or
      (uState <> 'CA' and oState = '{uState}')
ORDER BY oName ASC ;
于 2013-01-28T02:49:51.473 回答
0

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

SELECT 
    oName, 
    oName
FROM Organizations 
WHERE 
    IF(uState = 'CA' , oCounties LIKE '%{uCounty}%' , oState = '{uState}'  )
ORDER BY oName ASC ;
于 2013-01-28T05:31:01.517 回答