朋友-
我有2个表,第一个包含有关历史记录的详细信息,第二个包含有关当前产品详细信息的详细信息,我想获取其product
当前已更改的prod.description
。我得到了答案。现在我有另一个包含current and history details
和product
的表,现在我需要products
已更改的description
self join
,但我看到的是当前说明和以前的说明
我使用了以下查询
select h.ProdName,h.ProdId, h.MfgDate, h.ProdDescription
from historycurrent c join historycurrent h on c.ProdId=h.ProdId where
h.ProdDescription != c.ProdDescription;
,但我只需要输出中的最后3条记录。
答案 0 :(得分:0)
对于您当前的架构,您想做的事情似乎是不可能的。这是因为您的表被非规范化为混合对象表/事务表。要产生输出,您的表无疑具有六行。前三个插入添加了三个对象(“ D-Cold”,“ Otrivin”和“ ZanduBalm”),但是后三个插入使用新描述更新了这些对象(从而永久更改了旧记录)。
您需要将表分成两部分。所以这个:
create table historycurrent (
ProdName VARCHAR(20),
ProdId INT,
MfgDate VARCHAR(20),
ProdDescription VARCHAR(50)
);
需要成为(类似):
create table product (
prodId INT PRIMARY KEY,
prodName VARCHAR(?),
mfgDate DATE
);
create table history (
historyId INT,
prodId INT, -- foreign key
changeDate DATE,
prodDescription VARCHAR(?)
);
然后您可以查询历史记录并进行简单的联接以获取产品信息