缺少表postgresql的FROM子句条目

时间:2017-12-16 21:32:17

标签: postgresql

我有2个表:mks_equipmentmks_equipment_packs

mks_equipment有:IDTypeNameBrnand mks_equipment_packs有:packIDRockShoesHelmetRockShoesHelmet都引用了mks_eqipment.ID

我想创建一个触发器,如果​​您尝试添加ID,则会引发异常,将非头盔项目引用到Helmet中的mks_equipment_packs列。

以下是触发器代码:

IF (NEW.packid < 0 ) THEN
        RAISE EXCEPTION 'It can not be a negative number!';     END IF;
IF((mks_equipment.type != 'RockShoes' ) AND (mks_equipment.ID = NEW.rockshoes)) THEN
        RAISE EXCEPTION 'Wrong piece of equipment!';
END IF;
RETURN NEW;

这就是问题所在。如果我尝试INSERT INTO mks_equipment_packs VALUES (31, 33, 84)

然后它说:

Error: ERROR:  missing FROM-clause entry for table "mks_equipment"
LINE 1: SELECT (mks_equipment.type != 'RockShoes') AND (mks_equipmen...
                ^
QUERY:  SELECT (mks_equipment.type != 'RockShoes') AND (mks_equipment.ID = NEW.rockshoes)
CONTEXT:  PL/pgSQL function mks_equipment_checks() line 5 at IF

如何解决此问题?感谢。

P.S。 tsak特别说:我不能在几个表中拆分我的mks_equipment表。这是禁止的。

1 个答案:

答案 0 :(得分:2)

mks_equipment.type是表的一列,在该上下文中没有任何意义。您必须指定表中的许多行中的哪一行。

你可能正在寻找像

这样的结构
IF EXISTS (SELECT 1
           FROM mks_equipment
           WHERE type <> 'Rock Shoes'
             AND id = NEW.rockshoes)
THEN ...