Частичная избыточность таблицы MySQL

Я нахожу пару соседей по комнате вместе с информацией о номере.
в настоящее время я могу получить таблицу, как показано ниже

образец:

- Id1 Id2 Dorm room
- 101 133  2a   1
- 121 154  1b   3
- 218 584  3a   2
- 133 101  2a   1
- 584 218  3a   2
- 154 121  1b   3

не уверен, как очистить избыточность, как я хочу таблицу, как это

- Id1 Id2 Dorm  room
- 101 133  2a    1
- 154 121  1b    3
- 218 584  3a    2

Я начинал с такого стола

- StuID Dorm  room
- 101    2a    1
- 154    1b    3
- 121    1b    3
- ...

Спасибо!

1 ответ

  1. Не используйте equals в join for studentID, вместо этого используйте < or >.

    Это действительно будет работать, только если в каждой комнате может быть 1 или 2 соседа. если 3-й присутствует, другое решение должно быть сгенерировано.

    SELECT T1.StuID, T2.StuID, T1.Dorm, T1.Room
    FROM table T1
    LEFT JOIN Table T2
     on T1.Dorm = T2.Dorm 
    and T1.Room = T2.Room
    and T1.StuID < T2.StuID
    

    Это заставляет T1.StudentID должен быть меньше T2.StudentID, таким образом, более низкий ID студент всегда будет первым, обеспечивающим порядок и отсутствие дублирования.

    Left join использовался, так как я не был уверен, что в некоторых номерах был только 1 человек, и я предполагал, что вы хотели те.