【问题标题】:if else condition in sql [duplicate]sql中的if else条件[重复]
【发布时间】:2016-04-09 10:44:24
【问题描述】:

我想写一个 sql 查询:

if这个查询(select X from table1 where x = 'value1')有结果返回1 else if (select x from table2 where x = 'value2')有任何结果返回2否则返回0。

谢谢

【问题讨论】:

  • 将您关于在 C# 中读取数据集的问题作为单独的问题发布。或者,更合适的是,搜索已经涵盖的众多现有答案和网站。
  • @Yuck 好的,我会编辑我的问题,谢谢

标签: c# sql sql-server


【解决方案1】:

一种方法是selectcase

select (case when exists (select X from table1 where x = 'value1')
             then 1
             when exists (select x from table2 where x = 'value2')
             then 2
             else 0
        end) as flag

【讨论】:

  • 谢谢,但我怎样才能从 c# 中读取 'Then' 部分?我怎样才能访问它?
  • 假设您想从 C# 执行查询 select 1;。你知道怎么做吗?如果你这样做了,那么你也知道如何从 C# 运行 Gordon 的查询。它使用case 的事实是无关紧要的;它们都只是返回单个整数的查询。如果您不这样做,那么您应该查找有关 C# 中数据库访问的教程。
【解决方案2】:

是否可以用变量来实现:

DECLARE @FLAG INT = 0;

SELECT @FLAG = 1 FROM table1 WHERE x = 'value1'

IF @FLAG = 0 
BEGIN
    SELECT @FLAG = 2 FROM table2 WHERE x = 'value2'
END

SELECT @FLAG

@FLAG 变量将保存值 0、1 或 2,因为表包含或不包含数据。如果第一个选择不包含数据,则运行第二个,如果没有返回数据,则返回 0(默认 @FLAG 值)。

【讨论】:

    【解决方案3】:

    这应该可以工作,尽管它不是一个有效的查询,也不是使用这样的查询的最佳实践。

    select 
        case when exists (select X from table1 where x = 'value1') then 1 
        when exists (select x from table2 where x = 'value2') then 2 
        else 0 
    end;
    

    【讨论】:

      【解决方案4】:

      当查询很短时,选择案例是解决这种情况的更好方法。但是当查询又长又复杂时,我喜欢使用用户定义的函数,例如:

      如果 dbo.QueryExecution() 为空 - 做一点事 别的 --做点什么

      并且 dbo.QueryExecution() 可以执行您的查询 从 table1 中选择 X,其中 x = 'value1'。

      这样更容易测试和维护查询(至少对我来说更容易)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-15
        • 2020-09-09
        相关资源
        最近更新 更多