【问题标题】:Another SELECT if the first SELECT returned an empty set如果第一个 SELECT 返回一个空集,则另一个 SELECT
【发布时间】:2011-05-03 00:23:24
【问题描述】:

这是我的桌子:

  id    id_1     camp 
 1        0         x1     
 2        0         x2
 3        0         x3
 4        1         x4
 5        1         x5
 6        1         x6
 7        3         x7
 8        3         x8
 9        3         x9 

我需要一个 SQL,如果没有 id_1 为“x”的行,它应该返回 id_1 为 0 的行。例如,如果我要选择 id_1 = 2 ,它将返回select * whereid_1= 0

这可以在一个语句中完成吗?我在使用 IF EXISTS 或 CASE 时运气不佳。语法...

谢谢,一如既往

【问题讨论】:

    标签: mysql control-flow


    【解决方案1】:
      SELECT * 
      FROM mytable 
      WHERE id_1 = 2 
    UNION ALL
      SELECT * 
      FROM mytable 
      WHERE id_1 = 0 
        AND NOT EXISTS 
            ( SELECT * 
              FROM mytable 
              WHERE id_1 = 2
            )
    

    【讨论】:

      【解决方案2】:
      SELECT SQL_CALC_FOUND_ROWS id, id_1, camp
      FROM your_table
      WHERE id_1 = 2
      
      UNION ALL
      
      SELECT id, id_1, camp
      FROM your_table
      WHERE 
      FOUND_ROWS() = 0 AND id_1 = 0;
      

      【讨论】:

        【解决方案3】:

        如果没有 id_1 为“x”的行,它应该返回那些 id_1 为 0 的行。你可以试试这个 -

        IF EXISTS ( SELECT * FROM mytable WHERE id_1 = 2 ) 
            SELECT * FROM mytable WHERE id_1 = 2 
        ELSE
            SELECT * FROM mytable WHERE id_1 = 0
        

        【讨论】:

        • 由于某种原因这不起作用。但这样做了:SELECT * FROM myTable WHERE id_1 = IF(EXISTS(SELECT id_1 FROM myTable WHERE id_1 = 2 LIMIT 1), 2, 0)。谢谢。
        • 我在发布之前使用 sql server 进行了尝试。但是,我的 mysql 的语法是不同的。
        【解决方案4】:

        不要忽略在您的代码而不是 SQL 中实现此逻辑的方法。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-26
          • 2021-11-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-04-08
          相关资源
          最近更新 更多