如果第一个SELECT返回一个空集,则为另一个SELECT

时间:2010-10-31 08:11:06

标签: mysql control-flow

这是我的表:

  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的那些。例如,如果我要选择{ {1}} = 2,它会返回id_1 id_1 select * where

这可以在一个声明中完成吗?我没有运气使用IF EXISTS或CASE。语法...

谢谢,一如既往地

4 个答案:

答案 0 :(得分: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;

答案 1 :(得分:2)

  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 :(得分:0)

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

答案 3 :(得分:-2)

如果没有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