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

时间:2013-01-28 02:45:58

标签: mysql select if-statement

我需要帮助处理我将调用的应用程序中的SELECT语句&app;更新_用户'。此应用程序旨在更新Users表中的记录。应用程序代码引用了下表:

  • 国家
  • 组织
  • 用户

州表包含美国所有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;

对于uCounty字段:

SELECT cCounty, cCounty 
   FROM Counties 
   ORDER BY cCounty;

组织表中的记录可以在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

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

2 个答案:

答案 0 :(得分:5)

您可以在没有if一条声明的情况下执行此操作:

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

答案 1 :(得分:0)

您可以在where where

中使用if语句
SELECT 
    oName, 
    oName
FROM Organizations 
WHERE 
    IF(uState = 'CA' , oCounties LIKE '%{uCounty}%' , oState = '{uState}'  )
ORDER BY oName ASC ;