是否可以在SQL中使用IF/Else?
是否可以在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 = (
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')