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

use*_*188 4 mysql select if-statement

我需要一个应用程序中的SELECT语句的帮助,我将称之为'app_Update_Users'.此应用程序旨在更新Users表中的记录.应用程序代码引用了下表:

  • 状态
  • 组织
  • 用户

States表包含美国所有50个州的名单.Counties表包含加利福尼亚州的58个县的列表.组织表包含可能位于任何州且在一个或多个加利福尼亚州提供服务的组织列表.在添加或更新用户记录时,我想根据它们所处的状态以及它们提供服务的县或县来过滤组织列表.

该应用程序有三个select-type语句,用于在Users记录中创建属性的选项列表.我编写了适用于前两个语句的代码,但我遇到了第三个语句的代码问题.这些语句引用的字段是: - uState - uCounty - uOrganization

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

对于uState字段:

SELECT stAbbr, CONCAT(stAbbr, ' - ', stStatePK)
   FROM States 
   ORDER BY stAbbr;
Run Code Online (Sandbox Code Playgroud)

对于uCounty字段:

SELECT cCounty, cCounty 
   FROM Counties 
   ORDER BY cCounty;
Run Code Online (Sandbox Code Playgroud)

组织表中的记录可以在oCounties字段中列出多个县,因为组织可以在多个县中运行.因此,当前使用以下代码选择uOrganization字段的选项列表选项:

SELECT oName
   FROM Organizations 
   WHERE oCounties LIKE '%{uCounty}%' 
   ORDER BY oName ASC ;  
Run Code Online (Sandbox Code Playgroud)

我还可以使用以下代码根据组织表中的状态选择组织表中的记录:

SELECT oName, oName
   FROM Organizations 
   WHERE oState = '{uState}' 
   ORDER BY oName ASC ;
Run Code Online (Sandbox Code Playgroud)

但是,我想用于选择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
Run Code Online (Sandbox Code Playgroud)

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

Gor*_*off 5

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

SELECT oName, oName
FROM Organizations 
WHERE (ustate = 'CA' and oCouties like '%{uCounty}%') or
      (uState <> 'CA' and oState = '{uState}')
ORDER BY oName ASC ;
Run Code Online (Sandbox Code Playgroud)