是否可以在 SQL 中使用 if/else?如果我有一个名为supplier
列的表:sid
-> 主键,sname
并且city
.
然后我希望:
select sid from supplier where city="taipei"
如果不为空。- 或者
select sid from supplier where city="tainan"
是的你可以。我不知道其他 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 From this 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
目前还不清楚你想做什么(我把我之前的假设留在下面)。
您想将优先级关联到您的供应商,以便选择台北的供应商,但如果它不可用,则选择台南。
在这种特定情况下,您可以使用:
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 != '';
以下选择台北有供应商,否则选择台南供应商。如果它们都不存在,则不会返回任何内容。
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')