SQL Stored Queries - использовать результат запроса в качестве логического значения в зависимости от наличия записей - PullRequest
0 голосов
/ 03 апреля 2010

Просто попадаю в хранимые запросы SQL прямо сейчас ... в любом случае, вот моя схема базы данных (упрощенная для ВАШЕГО удобства):

member
------
id INT PK

board
------
id INT PK

officer
------
id INT PK

Если вы в ООП, сотрудник наследует член совета. Другими словами, если кто-то числится в таблице officer, он / она заносится в таблицу board и таблицу member. Я хочу узнать, какой кто-то имеет самый высокий уровень привилегий. Пока мой SP выглядит так:

DELIMITER //
CREATE PROCEDURE GetAuthLevel(IN targetID MEDIUMINT)
    BEGIN
        IF 
            SELECT `id`
            FROM `member`
            WHERE `id` = targetID;
        THEN
            IF
                SELECT `id`
                FROM `board`
                WHERE `id` = targetID;
            THEN
                IF
                    SELECT `id`
                    FROM `officer`
                    WHERE `id` = targetID;
                THEN
                    RETURN 3; /*officer*/
                ELSE
                    RETURN 2; /*board member*/
            ELSE
                RETURN 1; /*general member*/
        ELSE
            RETURN 0; /*not a member*/
    END //

DELIMITER ;

Точный текст ошибки #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near

    'SELECT id
    FROM member
    WHERE id = targetID;
THEN
    IF
        SEL' at line 4 

Я подозреваю, что проблема в аргументах для блоков IF. То, что я хочу сделать, это вернуть true, если набор результатов хотя бы один - то есть id был найден в таблице.

Кто-нибудь из вас, ребята, видит здесь что-нибудь, что нужно сделать, или я должен пересмотреть дизайн моей базы данных следующим образом:?

person
------
id INT PK
level SMALLINT

1 Ответ

1 голос
/ 03 апреля 2010
CREATE PROCEDURE GetAuthLevel(IN targetID MEDIUMINT)
    BEGIN

    DECLARE var INT;

    SELECT `id` INTO var
    FROM `member`
    WHERE `id` = targetID;

    IF var IS NOT NULL THEN
        ...
...