加入多个字段,只过滤真正不同的行
Posted
技术标签:
【中文标题】加入多个字段,只过滤真正不同的行【英文标题】:JOINing on several fields, filtering only the truly different rows 【发布时间】:2017-10-13 20:09:18 【问题描述】:我有两张表,每张都有 4 个字段。一个crc
、一个title
、一个parent
和一个parent_type
。
这些表中的数据代表文件以及它们属于哪个实体。
具有相同CRC的文件可以属于多个实体。
第一个表代表一个时间点的快照,第二个表代表另一个时间点的快照。
当文件被“移动”时(将其视为文件系统mv
操作),parent
和/或parent_type
将发生变化。
我想获取在快照 A 和快照 B 之间移动的文件的列表。
这是我目前拥有的:http://sqlfiddle.com/#!5/89f0d4/1
请注意,file 1
属于 2 个不同的父母。 file 4
已添加/创建。 file 2
已从 2 GRUP
移动到 3 GRUP
。那是我感兴趣的。
【问题讨论】:
这能回答你的问题吗? ***.com/questions/5676559/… @Nosajimiki 不。我已经知道如何加入(事实上,我提供的当前进度链接已经做到了)。我所要求的困难是“具有不同的多重连接”。 根据你的数据,一个文件可以同时在两个地方。对吗? @GordonLinoff 是的。我已经在问题的描述中提到了这一点:) 小提琴很棒,但想要的结果是什么样的 【参考方案1】:如果我正确理解您的问题,您需要在组合中添加左连接以排除那些没有改变的人...见下文:
select a.*
from memarxiu a
join arxiu b
on b.crc = a.crc
left join (select *
from arxiu) c
on c.crc = a.crc
and c.parent = a.parent
and c.parent_type = a.parent_type
where a.title = b.title
and (a.parent <> b.parent
or a.parent_type <> b.parent_type)
and c.crc is null;
【讨论】:
让我检查一下我的真实数据。 它似乎不起作用。注意箭头指向的元素上parent
的变化:imagebin.ca/v/3dgU4CXIylpu以上是关于加入多个字段,只过滤真正不同的行的主要内容,如果未能解决你的问题,请参考以下文章