剛剛進入SQL存儲查詢現在...反正存在的查詢作爲布爾的使用效果,這裏是我的數據庫架構(簡化爲您提供方便):SQL存儲查詢 - 基於記錄
member
------
id
INT PK
board
------
id
INT PK
officer
------
id
INT PK
如果你到OOP,官繼承董事會成員繼承。換句話說,如果某人在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
如果成員,董事會和執行官員都是特權級別 - 他們應該被包含在一個單一的表。自動生成的順序int值不可靠 - 我在Priveleges表中有一列名爲「rank」或「weight」的列。那麼你可以使用聚合(MIN,MAX專門)... – 2010-04-03 03:44:40
嗯。那麼,他們不只是*特權級別是事情。他們也有更多的數據,比如'officer'有一個'position'字段。我想我可以把'NULL'放在board和member中,或者把'position'放在另一個表中。 – 2010-04-03 22:01:31