从表连接中获取唯一的数据对
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】:使用>
(或<
)代替运算符<>
来比较time
s。
还可以使用带有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 新手,几天前才开始,还在学习它的基础以上是关于从表连接中获取唯一的数据对的主要内容,如果未能解决你的问题,请参考以下文章