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

标签 mysql sql

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;

enter image description here

Query and Output但我只需要输出中的最后 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/

相关文章:

mysql - 如何从 Joomla 批量删除用户?我的网站遭到垃圾邮件机器人攻击,我有超过 40,000 名注册用户,但只有 1 名活跃用户。

sql - 数据分成多个组

sql - 使用 select 语句更新表中所有记录的字段

java - mysql 的一句话中可能有 3 个插入吗?

mysql - 如何使用sql子查询分组

Mysql 表进入 Elastic 搜索

java - Spring Hibernate查询与非主键的一对一关系

sql - SQL Server中存在重复行时如何选择具有最大值的行

mysql - 用数据填充表格(玩家排名)

mysql - 合并同一个表中的多行(一周中的几天)