У меня есть эта функция:
DROP FUNCTION IF EXISTS find_linkid;
DELIMITER //
CREATE FUNCTION `find_linkid`(pc1 VARCHAR(50)
RETURNS INT
BEGIN
DECLARE linkId int;
SELECT a.id INTO linkId FROM PC_A a WHERE a.pc=pc1;
ON
IF linkId IS NULL THEN
SELECT b.id INTO linkId FROM PC_B b WHERE b.pc=pc1;
END IF;
RETURN linkId;
END
//
По сути, запустите один запрос, если он ничего не возвращает (a.id объявлен как NOT NULL), запустите другой запрос и верните идентификатор ссылки. Если это также не найдено, linkId будет НЕДЕЙСТВИТЕЛЬНЫМ, возвращая НЕДЕЙСТВИТЕЛЬНЫЙ, если pc1 вообще не найден, в порядке.
Это работает, но выдает предупреждения, если первый запрос ничего не возвращает:
select find_linkid('12BD');
+------------------------------+
| find_linkid('12BD') |
+------------------------------+
| 667 |
+------------------------------+
1 row in set, 1 warning (0.00 sec)
mysql> show warnings;
+---------+------+-----------------------------------------------------+
| Level | Code | Message |
+---------+------+-----------------------------------------------------+
| Warning | 1329 | No data - zero rows fetched, selected, or processed |
+---------+------+-----------------------------------------------------+
1 row in set (0.00 sec)
Как правильно выполнить один запрос, если он ничего не возвращает, запустить другой запрос?