friend -
我有 2 个表,第一个包含有关历史记录的详细信息,第二个包含有关当前产品详细信息的详细信息,我想获取其 prod.description
已更改的 product
在当前。我得到了这个问题的答案。现在我有另一个表,其中包含产品
的当前和历史详细信息
,现在我需要其产品
描述
已更改,我正在尝试使用自加入
,但我看到当前和以前的描述
我使用了以下查询
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 条记录。
最佳答案
对于您当前的架构来说,您想要做的事情似乎是不可能的。这是因为您的表被非规范化为混合对象表/事务表。为了产生您所拥有的输出,您的表无疑有六行。前三个插入添加了三个对象(“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(?)
);
然后就可以查询历史记录并对产品信息进行简单的join
关于mysql - 自连接-当我尝试进行自连接时,我的查询显示匹配和不匹配的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55214394/