MySQL, если запрос Select возвращает 0 строк затем другой запрос Select?

если select * from table where x=1 возвраты 0 строк, затем мне нужно select * from table where x=2 [or some other query]. Действительно ли возможно сделать это в единственном запросе MySQL с условным оператором?

Править: Все ответы с UNION работа, но только если оба запроса выбирают из той же таблицы (или таблиц с тем же числом столбцов). Что, если второй запрос применяется на другую таблицу с соединениями?

Позвольте мне записать свои запросы для создания вопроса более ясным:

1-й:

SELECT  table1.a, table2.b  from table1 LEFT JOIN table2 ON table2.x= table1.x
WHERE ..... 

если результат 1-го является пустым затем:

2-й:

SELECT table1.a FROM table1 
WHERE ....

Я буду использовать строки от 1-го запроса, если он возвратит кого-либо, то иначе 2-й будет использоваться.

11
задан sepehr 30 January 2018 в 20:14
поделиться

4 ответа

Это, похоже, работает после быстрого теста, который я только что провел, и позволяет избежать необходимости дважды проверять существование x=1.

SELECT SQL_CALC_FOUND_ROWS *
FROM mytable
WHERE x = 1

UNION ALL

SELECT *
FROM mytable
WHERE 
FOUND_ROWS() = 0 AND x = 2;

Edit: После вашего уточнения вопроса очевидно, что для того, чтобы вышеуказанное сработало, 2 запроса должны быть совместимы с UNION.

Ответ на ваш уточненный вопрос - Нет. Это невозможно в одном запросе. Вам нужно будет использовать некоторую условную процедурную логику для выполнения нужного запроса.

15
ответ дан 3 December 2019 в 07:36
поделиться

Вы можете попробовать...

SELECT *
    FROM mytable
    WHERE x = 1

UNION

SELECT *
    FROM mytable
    WHERE x = 2 AND
          NOT EXISTS (SELECT *
                          FROM mytable
                          WHERE x = 1);

если вы не считаете это слишком отвратительным взломом.

1
ответ дан 3 December 2019 в 07:36
поделиться

Если два запроса возвращают разное количество столбцов, можно заполнить один из результатов пустыми столбцами, а также добавить сначала столбец идентификатора.

SELECT SQL_CALC_FOUND_ROWS 1 query_type, mytable.*, 
'' col1, '' col2, '' col3, '' col4
FROM mytable
WHERE x = 1

UNION ALL

SELECT 2, mytable2.*
FROM mytable2
WHERE 
FOUND_ROWS() = 0 AND x = 2;

Где mytable2 имеет на 4 столбца больше, чем mytable.

0
ответ дан 3 December 2019 в 07:36
поделиться

yes

Подзапросы с EXISTS или NOT EXISTS

http://dev.mysql.com/doc/refman/5.1/en/exists-and-not-exists-subqueries.html

пример :

SELECT column1 FROM t1 WHERE NOT EXISTS (SELECT * FROM t2);
0
ответ дан 3 December 2019 в 07:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: