Mysql - использовать вторичный подзапрос, если и только если первый подзапрос возвратил пустой - PullRequest
4 голосов
/ 10 мая 2011

Учитывая две таблицы подзапросов t1 и t2, как я могу вернуть t2 тогда и только тогда, когда t1 вернул пустые строки?

Редактировать: Добавлен пример

T1

SELECT * 
  FROM common_table 
 WHERE language_id = 1

Т2 * +1010 *

SELECT * 
  FROM common_table 
 WHERE language_id = 2

По сути, я делаю то, что в случае, если T1 возвращает пустые строки, я бы хотел, чтобы он выполнял T2 и возвращал эти строки. Теперь я полностью осознаю, что могу сделать это на PHP, но запрос является подзапросом, и я бы предпочел, чтобы SQL ( не PHP ) обрабатывал его.

Ответы [ 4 ]

3 голосов
/ 10 мая 2011
Select ...
From common_table
Where language_id = 1
    Or  (
        language_id = 2
        And Not Exists  (
                        Select 1
                        From common_table
                        Where language_id = 1
                        )
        )
2 голосов
/ 10 мая 2011

В MSSQL я могу сделать что-то вроде

If EXISTS (SELECT * FROM common_table WHERE language_id = 1)
BEGIN
    SELECT * FROM common_table WHERE language_id = 1
END ELSE BEGIN
    SELECT * FROM common_table WHERE language_id = 2
END

Должен быть таким же в MySQL или аналогичным

1 голос
/ 10 мая 2011

Мои знания MySql немного ржавые, и я думаю, что это должно сработать.

SELECT * FROM common_table 
         WHERE language_id = 2 and 
               0 = ( SELECT count(*) FROM common_table 
                                     WHERE language_id = 1
                   ) ;
0 голосов
/ 10 мая 2011
SELECT * 
  FROM common_table 
 WHERE language_id = 1
UNION
SELECT * 
  FROM common_table 
 WHERE language_id = 2
       AND NOT EXISTS (
                       SELECT * 
                         FROM common_table AS T2 
                        WHERE T2.language_id = 1
                      );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...