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

是否可以在SQL中使用IF/Else?,sql,database,Sql,Database,是否可以在SQL中使用if/else?如果我有一个名为supplier的表,其中有列:sid->主键、sname和city 然后我想: 选择city=“taipei”所在供应商的sid如果不为空 或从供应商那里选择sid,其中city=“tainan” 现在还不清楚你想做什么(我把之前的假设留在下面) 您希望将优先权与供应商关联,以便选择台北的优先权,但如果不可用,则选择台南 在这种特定情况下,您只需使用: SELECT sid FROM supplier WHERE city = (

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

然后我想:

  • 选择city=“taipei”所在供应商的sid
    如果不为空
  • 从供应商那里选择sid,其中city=“tainan”

  • 现在还不清楚你想做什么(我把之前的假设留在下面)

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

    在这种特定情况下,您只需使用:

    SELECT sid FROM supplier WHERE city = (
        SELECT MAX(city) FROM supplier WHERE city IN ('Taipei', 'Tainan')
    );
    
    内部子选择将检索台北或台南(如果不可用)

    这是因为台北在词典编纂上比台南大,但如果你想要一个更灵活的解决方案,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
    
    这将收回所有供应商,但台北的供应商,如果有,将首先出来;限制1将截断对第一行的响应

    以下解决方案不适用

    这将从台北或台南(这当然意味着该城市不是空的!)的供应商处获得sid:

    如果sid不为空,则将按上述方式从供应商处获取sid:

    SELECT sid FROM supplier WHERE city IN ('Taipei', 'Tainan') AND sid IS NOT NULL;
    
    这将如上所述从供应商处获取sid,如果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 != '';
    

    是的,你可以。我不知道其他DBMS,但我在MicrosoftSQLServer的存储过程中使用过类似的东西,比如:

    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中,这也是可能的。看

    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
    

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

    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')
    

    当它是主键(与次键或备用键相反)而不是灵长类键(该键与猴子无关!)
    时,您可能想看看
    的情况,其中city不为null且city!=''而len(城市)可能>0。Shugh您使用的是哪个数据库?i-e DMBSI我想他想要台北的供应商id,如果不存在,则需要台南的供应商id。因此,是否可以只选择其中一个(台北、台南)优先?这意味着,如果“台北”有记录,则只使用“城市”=“台北”的记录。否则,请使用'city'='Tainan'作为查询条件。是的,您可以定义城市的“可取性”或优先级。我会编辑我的答案。谢谢你的回复。这就是我的意思。你知道这在MySQL中是否可行吗?是的,请参阅我的答案(更新版)。我还预留了一个链接,你可以访问那里
    
    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')