是否可以在SQL中使用IF / Else?

时间:2012-08-21 09:24:47

标签: sql database

是否可以在SQL中使用if / else?如果我有一个名为supplier的表格,其列为sid - >主键,snamecity

然后我希望:

  1. select sid from supplier where city="taipei"如果不是空的话。
  2. select sid from supplier where city="tainan"

3 个答案:

答案 0 :(得分:4)

是的,你可以。我不知道其他DBMS,但我已经在我的存储过程中在Microsot SQL Server中使用过这样的东西;

IF EXISTS
   (SELECT [sid] FROM [supplier]  WHERE [city]= "taipei")

select sid from supplier where city="taipei"  // your true condition query
ELSE
select sid from supplier where city="tainan"

在MySQL中link,事实证明这也是可能的。见;

IF EXISTS(SELECT * FROM tbl_name WHERE category_code ='some-category-code') THEN UPDATE tbl_name SET active='0' WHERE category_code = 'some-category-code' END IF

答案 1 :(得分:1)

目前还不清楚你想做什么(我在下面留下我以前的假设)。

您希望将优先级与供应商相关联,以便选择台北的供应商,但如果不可用,则选择台南。

在这种特殊情况下,你可以使用:

SELECT sid FROM supplier WHERE city = (
    SELECT MAX(city) FROM supplier WHERE city IN ('Taipei', 'Tainan')
);

内部子SELECT将检索台北,如果不可用,将检索台南。

这使用的事实是台北的词典字典大于台南,但如果你想要一个更灵活的解决方案,MAX就行不通。在这种情况下,你会改变子选择按顺序排序城市(缺少城市当然是不可取的),然后获取最理想的城市:

SELECT sid FROM supplier WHERE city = (
    SELECT city FROM supplier ORDER BY CASE
        WHEN city = 'Taipei' THEN 1
        WHEN city = 'Tainan' THEN 2
        WHEN city = 'New York' THEN 3
        ELSE 4
     END
     LIMIT 1
);

该子选择现在将首先检索台北,但缺少台北它将到达台南等。

请注意,如果您只想要一个SID,则可以更简单地执行此操作:

SELECT sid FROM supplier ORDER BY CASE
        WHEN city = 'Taipei' THEN 1
        WHEN city = 'Tainan' THEN 2
        WHEN city = 'New York' THEN 3
        ELSE 4
     END
     LIMIT 1

这将检索所有供应商,但台北的供应商(如果有的话)将首先出现;并且LIMIT 1将截断对第一行的响应。

以下解决方案不适用

这将是来自台北或台南市的供应商的sid(当然这意味着城市不是空的!):

SELECT sid FROM supplier WHERE city IN ('Taipei', 'Tainan');

如果sid不为空,这将从供应商获得sid:

SELECT sid FROM supplier WHERE city IN ('Taipei', 'Tainan') AND sid IS NOT NULL;

如上所述,这将从供应商那里得到sid,如果它是空的,则替换sid。

SELECT CASE WHEN sid IS NULL then 'Empty' ELSE sid END AS sid
    FROM supplier WHERE city IN ('Taipei', 'Tainan');

也许你应该提供两到三个具有预期结果的样本行。

编辑:抱歉,我现在看到sid是主键,这意味着它永远不会为空。这意味着案例2和案例3永远不适用。

那么也许你的意思是 sname 不是空的?:

SELECT sid FROM supplier WHERE city IN ('Taipei', 'Tainan')
    AND sname IS NOT NULL AND sname != '';

答案 2 :(得分:0)

如果在台北有一个供应商,以下选择供应商,否则在台南选择一个。如果它们都不存在,则不会返回任何内容。

select sid
from supplier
where city = 'Taipei'

union all

select sid
from supplier
where city = 'Tainan' 
  and not exists (select 1 from supplier where city = 'taipei')