Запустите различные команды SELECT в MySQL в зависимости от результата предыдущего запроса - PullRequest
0 голосов
/ 23 апреля 2020

Предположим, у меня есть две таблицы в моей базе данных: table1 и table2. В таблице 1 есть столбец, в котором хранится идентификатор, на который ссылается запись в таблице 2 с этим идентификатором.

Теперь я собираюсь выбрать некоторые записи и сохранить их во временной таблице для дальнейшего использования:

CREATE TEMPORARY TABLE IF NOT EXISTS temp_table AS (
SELECT table1.table2_id, SUM(table1.quantity) AS qty
FROM table1
WHERE table1.table2_id IN (SELECT table2.id FROM table2)
GROUP BY table1.table2_id
);

То, что делает этот запрос, не так важно для того, что я собираюсь спросить позже. Так что не тратьте слишком много времени, пытаясь понять это. Я включил его сюда только для полноты.

Очевидно, что этот запрос либо не вернет вообще никаких записей, либо вернет некоторые записи.

Если он не вернул записей, я хочу запустить свой второй запрос, который выглядит следующим образом

SELECT table1.*, 0 
FROM table2 INNER JOIN temp_table
ON table2.id = temp_table.table2_id;

В противном случае, если мой запрос возвратил несколько записей, я хочу выполнить этот запрос, который использует столбец «qty» из моей временной таблицы:

SELECT table1.*, qty
FROM table2 INNER JOIN temp_table
ON table2.id = temp_table.table2_id;

Итак, вот мой вопрос: я ищу решение MySQL, которое сначала запускает первый запрос, а затем в зависимости от того, возвратил ли он что-то или нет, запускает второй или третий запрос.

Я пытался использовать оператор IF ELSE, следуя документам MySQL, но он сказал Unrecognized statement type. (near "IF" at position 0). Я новичок в SQL программировании. Любая помощь приветствуется. Заранее спасибо.

1 Ответ

2 голосов
/ 23 апреля 2020

Я интерпретирую разницу только как select - поэтому второй запрос относится к table1, а не table2.

Если это так, вы хотите LEFT JOIN:

SELECT t1.*, COALESCE(qty, 0)
FROM table1 t1 LEFT JOIN
     temp_table tt
     ON t1.id = tt.table1_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...