从表连接中获取唯一的数据对

Posted

技术标签:

【中文标题】从表连接中获取唯一的数据对【英文标题】:Get unique data pair from table join 【发布时间】:2021-10-22 12:40:42 【问题描述】:

我正在尝试在 SQL 中创建一个匹配程序,它输出以下数据

共享街道 共享宠物 第一个人最喜欢的食物 第二个人最喜欢的食物

People 表有一个不同的时间戳

我写的

Create Table match As
  Select a.street, a.pet, a.food, b.food
  From People a, People b
  Where a.street = b.street And a.pet = b.pet And a.time <> b.time
  Order by a.time;

示例表

Street Pet Food Time
maple dog pizza 2021/07/28 12:55:56 PM MDT
maple cat pizza 2021/07/28 3:34:56 PM MDT
maple dog french fries 2021/07/28 12:34:56 PM MDT
abney dog pizza 2021/07/28 5:34:56 PM MDT
abney cat pizza 2021/07/28 12:45:56 PM MDT
abney dog french fries 2021/07/28 2:34:56 PM MDT

例如它输出这个

maple|dog|pizza|french fries
maple|dog|french fries|pizza (duplicate)
abney|dog|pizza|french fries
abney|dog|french fries|pizza (duplicate)

我怎样才能使它不返回重复值?

编辑:我可能不想使用“Distinct”,因为有很多非重复值可以标记为重复(因为它的输出相同但来自不同的人)

【问题讨论】:

【参考方案1】:

使用&gt;(或&lt;)代替运算符&lt;&gt;来比较times。 还可以使用带有ON 子句的正确连接:

SELECT p1.street, p1.pet, p1.food, p2.food
FROM People p1 INNER JOIN People p2
ON p2.street = p1.street AND p2.pet = p1.pet AND p2.time > p1.time
ORDER BY p1.time;

请参阅demo。

【讨论】:

谢谢!这完美解决了我的问题!我以为没有加入它仍然可以工作,但我错了 @Enderhoang 您使用的表名之间带有, 的语法实际上是交叉连接的旧样式。 感谢您提供这些知识!我是 SQL 新手,几天前才开始,还在学习它的基础

以上是关于从表连接中获取唯一的数据对的主要内容,如果未能解决你的问题,请参考以下文章

赛普拉斯:如何比较与从表中读出的字符串/文本连接的不同数据类型

Hbase学习——对表操作进行封装

sql对表的操作

Kettle创建一个简单的转换-表数据同步

由于外键为空值,无法从表中获取数据

加入相同的字段,不同的数据类型