【问题标题】:How to join results from one table into pairs如何将一个表中的结果连接成对
【发布时间】:2014-05-19 15:21:37
【问题描述】:

我有一张桌子

    nr_id | Name | Surname | roomate_id
      1   | Tom  | Hopkins |    4
      2   | Mike | Rubens  | 
      3   | Dylan| Obama   |    5
      4   | Jason| Lin     |    1
      5   | Peter| Huang   |    5
    ....  | .... | ....    | ....

是否可以用 sql 查询加入这个表来得到这样的结果?

    name  | Surname | rommate name|roomate surname
    Tom   | Hopkins | Jason       | Lin
    Jason | Lin     | Tom         | Hopkins
    Dylan | Obama   | Peter       | Huang
    Mike  | Rubens  |             |   
    ....  | ....    |  ...        | ....

我想将结果分组为 2 人对,如上所示。有些人没有配对

【问题讨论】:

  • 一个人成为自己的室友是什么意思?如果三个人共用一个宿舍,你想做什么?你如何在表格中表示它?
  • 这是一个非常简单的情况;)我只需要一个房间里的两个人。
  • ID 5 的 roomate_id 值打错了?

标签: sql join inner-join


【解决方案1】:

这是基本的 SQL...您只需像这样将表与自身连接起来:

SELECT
   p.name,
   p.surname,
   r.name AS roomate_name,
   r.surname AS roomate_surname
FROM pairs p
LEFT JOIN pairs r ON r.nr_id=p.roomate_id

【讨论】:

    【解决方案2】:

    你需要一个左连接。查询类似于:

    SELECT p1.name,p1.surname,p2.name as roomate_name,p2.surname as roomate_surname
    FROM pairs p1
    LEFT JOIN pairs p2 on p1.nr_id=p2.roomate_id
    WHERE p1.nr_id <> p1.roommate_id
    

    【讨论】:

    • 你应该添加条件p1.nr_id &lt;&gt; p1.roommate_id
    • 谢谢 :) 有没有机会将成对的人并排显示分组?
    • 你的意思是显示在相邻的行吗?
    • yes :) 先显示配对,然后显示没有室友的人
    • 尝试添加 ORDER BY p1.nr_id,p1.roomate_id,这只会让人们最后没有室友
    【解决方案3】:

    为避免两次获得同一对,您可以添加一个条件

    SELECT p.name,
           p.surname,
           r.name AS roomate_name,
           r.surname AS roomate_surname
    FROM   pairs p
           LEFT JOIN pairs r ON r.nr_id=p.roomate_id
    WHERE  p.nr_id > r.nr_id
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多