在oracle中查找并​​插入相应的列值

时间:2013-02-23 07:24:07

标签: oracle lookup

我有两张桌子,ACTIVITY和EVENT。 ACTIVITY在一列中列出了所有可能的代码(如INT),在另外两列中列出了它们的描述(REASON和CATEGORY)。我希望用户只在应用程序前端的EVENT表中输入CODE,然后执行查找以将匹配的描述列插入到同一个(EVENT)表中。

CREATE TABLE EX.ACTIVITY
(
  CODE        INTEGER                           NOT NULL,
  REASON      VARCHAR2(40 BYTE)                 NOT NULL,
  CATEGORY    VARCHAR2(30 BYTE)                 NOT NULL,

)

CREATE TABLE EX.EVENTS
(
  ID          INTEGER                           NOT NULL,
  CODE        INTEGER                           NOT NULL,
  REASON      VARCHAR2(40 BYTE)                 NOT NULL,
  CATEGORY    VARCHAR2(30 BYTE)                 NOT NULL,

)

谢谢。(我有点新手顺便说一句,如果这是初级的话,请原谅我)

1 个答案:

答案 0 :(得分:0)

您有一个ACTIVITY表,用于存储ACTIVITY的属性。为什么要将这些属性存储在另一个表(EVENTS)中?这违反了所谓的normalization(第二和第三范式)。如果将ACTIVITY的属性存储在EVENTS表中,则会为自己创建一系列问题,例如冗余数据(不必要地在事件表中重复原因和类别)。只需将活动代码存储在事件表中即可!这样,如果您以后必须更改活动的类别,则只需更改与该代码对应的ACTIVITY表记录。

要显示值,请在SELECT语句中使用JOIN:

SELECT e.id, e.code, a.reason, a.category
  FROM events e JOIN activity a ON e.code = a.code
 WHERE ...

JOIN完全听起来像它:它连接两个表的记录,其中满足ON子句中的条件。因此,在此示例中,您将为事件和活动表中具有匹配代码值的每对记录返回一行。您可能会有许多具有相同代码的事件;这不是问题 - 具有该代码的每个事件行将从该代码的活动表中获得相同的值。这样可以保持数据完整性,同时允许您在一个select语句中显示两个表中的值。