自我连接-当我尝试进行自我连接时,我的查询显示匹配和不匹配的值

时间:2019-03-18 03:31:11

标签: mysql sql

朋友-

我有2个表,第一个包含有关历史记录的详细信息,第二个包含有关当前产品详细信息的详细信息,我想获取其product当前已更改的prod.description。我得到了答案。现在我有另一个包含current and history detailsproduct的表,现在我需要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;

enter image description here

Query and Output,但我只需要输出中的最后3条记录。

1 个答案:

答案 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(?)
);

然后您可以查询历史记录并进行简单的联接以获取产品信息