Мне нужно знать, как я могу написать операторы IF и операторы CASE break, которые используют и выполняют запросы и т. Д. В MySQL? - PullRequest
0 голосов
/ 26 июля 2010

Мне нужно выполнить запрос, который сильно зависит от нескольких условий, которые необходимо проверить путем анализа этих данных в других таблицах, основная цель - вернуть строки из таблиц, если все условия в других таблицах правда, мне надоели INNER соединения LEFT и оператор WHERE, мне нужно посмотреть одну таблицу, если возвращаемое значение 1, 0 или 4 или набор значений, мне нужно выполнить другой оператор и на основе результаты этого мне нужно выполнить одно последнее утверждение, которое является моим окончательным результатом.

Что касается функций, это процедуры, я изучаю документацию MySQL, как ад, и все, что она мне дает, это:

DELIMITER $$

CREATE DEFINER=`root`@`localhost` FUNCTION `SimpleCompare`(n INT, m INT) RETURNS varchar(20) CHARSET latin1
BEGIN

    DECLARE s VARCHAR(20);

    IF n > m THEN SET s = '>';

    ELSEIF n = m THEN SET s = '=';

    ELSE SET s = '<';

    END IF;

    SET s = CONCAT(n, ' ', s, ' ', m);

    RETURN s;

  END

Теперь это так просто, я даже не знаю, с чего начать, я "returns varchar(20)", что это должно быть, если я ожидаю, что он вернет таблицу из 10 строк, а не VARCHAR (20), что объявить "DECLARE s VARCHAR(20);" так, как если бы я хотел, чтобы это была таблица, а не VARCHAR (20).

(n > m) после «IF», ​​как заменить его собственным запросом, и после того, как я это сделаю, «THEN SET s = '>'», как мне установить s = для результатов запроса?, это сводит меня с ума, синтаксис за мной, и документация ничего не объясняет.

Заранее спасибо

1 Ответ

0 голосов
/ 26 июля 2010

Насколько мне известно, MySQL не поддерживает табличный тип данных.Использование функции, которую вы разместили, будет:

SELECT simplecompare(yt.n, yt.m) AS eval
    FROM YOUR_TABE yt

..., который будет возвращать:

eval
--------
1 = 1
2 < 3
etc.

SQL основан на наборе, который отличается от типичного программирования (процедурного или OO).

...