【问题标题】: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”,因为有很多非重复值可以标记为重复(因为它的输出相同但来自不同的人)

【问题讨论】:

    标签: sqlite join duplicates


    【解决方案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 新手,几天前才开始,还在学习它的基础
    猜你喜欢
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多