【问题标题】:How to use SQL Select statement with IF EXISTS sub query?如何在 IF EXISTS 子查询中使用 SQL Select 语句?
【发布时间】:2011-12-09 22:33:25
【问题描述】:

如何使用 IF EXISTS 语句(SQL Server)从子查询中选择布尔值?

应该是这样的:

SELECT 
  TABEL1.Id, 
  NewFiled = (IF EXISTS(SELECT Id FROM TABLE2 WHERE TABLE2.ID = TABEL1.ID) 
                 SELECT 'TRUE' 
              ELSE 
                 SELECT 'FALSE') 
FROM TABEL1

【问题讨论】:

    标签: sql sql-server exists


    【解决方案1】:

    使用CASE:

    SELECT 
      TABEL1.Id, 
      CASE WHEN EXISTS (SELECT Id FROM TABLE2 WHERE TABLE2.ID = TABLE1.ID)
           THEN 'TRUE' 
           ELSE 'FALSE'
      END AS NewFiled  
    FROM TABLE1
    

    如果TABLE2.ID 是唯一键或主键,您也可以使用:

    SELECT 
      TABEL1.Id, 
      CASE WHEN TABLE2.ID IS NOT NULL
           THEN 'TRUE' 
           ELSE 'FALSE'
      END AS NewFiled  
    FROM TABLE1
      LEFT JOIN Table2
        ON TABLE2.ID = TABLE1.ID
    

    【讨论】:

      【解决方案2】:

      你也可以使用 ISNULL 和一个 select 语句来得到这个结果

      SELECT
      Table1.ID,
      ISNULL((SELECT 'TRUE' FROM TABLE2 WHERE TABLE2.ID = TABEL1.ID),'FALSE') AS columName,
      etc
      FROM TABLE1
      

      【讨论】:

      • 我刚刚注意到你说你想要布尔值,最好选择 1/0 而不是 True / False
      【解决方案3】:
      SELECT Id, 'TRUE' AS NewFiled FROM TABEL1
      INTERSECT
      SELECT Id, 'TRUE' AS NewFiled FROM TABEL2
      UNION
      SELECT Id, 'FALSE' AS NewFiled FROM TABEL1
      EXCEPT
      SELECT Id, 'FALSE' AS NewFiled FROM TABEL2;
      

      【讨论】:

      • +1 用于在一个查询中组合 INTERSECTUNIONEXCEPT
      • 减 1 表示同样的事情 - 以不必要的复杂性炫耀,这将更加难以阅读和维护。
      • @Anon_unique 对我来说,这个代码非常简单,可能是因为我认为基于集合。
      【解决方案4】:

      使用CASE 语句并像这样执行:

      SELECT 
          T1.Id [Id]
          ,CASE WHEN T2.Id IS NOT NULL THEN 'TRUE' ELSE 'FALSE' END [Has Foreign Key in T2]
      FROM
          TABLE1 [T1]
          LEFT OUTER JOIN
              TABLE2 [T2]
              ON
              T2.Id = T1.Id
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-28
        • 1970-01-01
        • 2014-07-05
        • 2014-10-18
        • 2013-05-09
        • 2012-01-16
        • 1970-01-01
        相关资源
        最近更新 更多