首页 > 解决方案 > If else 条件与 SQL 中的 select

问题描述

您好,我不确定我的查询:

IF((SELECT table2.active FROM table2) = 0)
    SELECT table2.price FROM table2
ELSE IF ((SELECT table2.active FROM table2) = 1)
          SELECT table1.price FROM table1

我尝试使用 case 语句,但没有得到好的结果。

SELECT CASE WHEN table2.active = 0
        THEN (SELECT table2.price)
        WHEN table2.active = 1
        THEN (SELECT table1.def_price)
   END AS price

从表2,表1;

我是 SQL 新手。

谢谢

标签: sql

解决方案


您正在编写的不是语义上有效的 SQL。本质上,您是在询问“给我 table2 中的所有活动行”,假设只有一个,并期望 if/then/else 语句根据结果执行一些逻辑。

如果表中实际上只有一行,则可以通过将 TOP 1 添加到查询中来完成这项工作(但还有其他原因,您可能不想这样做):

SELECT TOP 1 table2.active FROM table2

假设这使您在功能上声明“工作”,您可能希望使用变量来存储值。否则,在不理想的 else 块的情况下,您将运行两次查询。查询相对昂贵,因为它们在集合上工作并且可以从磁盘读取。最好对它们进行基于集合的操作。

您可能应该退后一步,问为什么要根据值将一些数据存储在表 1 或表 2 中。还要询问您是否尝试在多个值的循环中执行此操作。当您可以一次对整组行执行操作时,SQL 效果最佳。

有几本很好的 SQL 书籍,如果您是 SQL 新手,可以从中学习。最终,像这样混合过程和基于集合的操作对于语言新手来说是一个常见问题。只需一点点工作,您就可以训练您的大脑在集合论中进行思考,并使用 SQL 的全部功能来帮助您。

祝你好运!


推荐阅读