刚刚进入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