Другой SELECT, если первый SELECT вернул пустой набор - PullRequest
2 голосов
/ 31 октября 2010

Это мой стол:

  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 * where id_1 = 0.

Может ли это быть сделано в одном утверждении? У меня было мало удачи, используя IF EXISTS или CASE. Синтаксис ...

Спасибо, как всегда

Ответы [ 4 ]

2 голосов
/ 25 августа 2011
  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 голосов
/ 25 января 2011
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;
0 голосов
/ 31 октября 2010

Не игнорируйте способ реализации этой логики в вашем коде вместо SQL.

0 голосов
/ 31 октября 2010

Если нет строк с 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...