Объединение 2 таблиц PostgreSQL - PullRequest
0 голосов
/ 02 ноября 2019

ОК, это звучит как очень простой вопрос с явно базовым решением. Я не большой пользователь SQL, но у меня есть проблема соединения двух таблиц. Вероятно, лучше всего показать вам, что я пытаюсь объединить:

Таблица 1, Students_info :

+--------------------------------------------+
| NAME        ID         DEPARTMENT        N |
+--------------------------------------------+
| Joe Blogs   234-2      Maths             2 |
| Jane Doe    342-6      Physics           4 |
| John Smith  356-1      Chemistry         7 |
+--------------------------------------------+

Таблица 2, Students_grades :

+--------------------------------+
| SUBJECT         GRADE     N   |
+--------------------------------+
| Chemistry       B         NULL |
| Physics         A         NULL |
| Maths           A         NULL |
| Engineering     B         NULL |
| NULL            NULL      2    |
+--------------------------------+

Обе таблицы содержат столбец с именем N. Таблица Students_info уже имеется, однако я добавил столбец N в таблицу Students_grades сНадеюсь, что я смогу объединить 2 таблицы через этот столбец.

Теперь меня интересуют Блоги Джо из Students_info , поэтому я поместил 2 в столбец N таблицы Students_grades . Поэтому я надеялся собрать всю информацию о Joe Blogs и выводе. В выходной таблице будут отображаться его имя, удостоверение личности, отдел и предметы с оценками.

Кто-нибудь знает, как мне поступить? Кто-то на днях предложил использовать Внешний ключ ..?

Примечание. По сути, каждый студент (или строка) из student_info имеет свою собственную таблицу, student_grades .

То, что я ищу, это то, что выглядело бы (в моей голове):

+----------------------------------------------------------------+
| NAME        ID       DEPARTMENT       SUBJECT        GRADE     |
+----------------------------------------------------------------+
| Joe Blogs   234-2    Maths            Chemistry      B         |
|                                       Physics        A         |
|                                       Maths          A         |
|                                       Engineering    B         |
+----------------------------------------------------------------+

Приветствия

Ответы [ 2 ]

1 голос
/ 02 ноября 2019

Чтобы связать информацию в таблице оценок с вашим учеником Джо, таблица должна выглядеть следующим образом:

+-------------------------------+
| SUBJECT         GRADE     N   |
+-------------------------------+
| Chemistry       B         2   |
| Physics         A         2   |
| Maths           A         2   |
| Engineering     B         2   |
+-------------------------------+

Вы можете добавить больше строк для других учеников, например, для присвоения Джейн A по химиии John a C in Maths:

| Chemistry       A         4   |
| Maths           C         7   |

Чтобы присоединиться к ним, вы должны использовать

SELECT * FROM students_info JOIN students_grades USING (N)

Столбец N должен быть объявлен как уникальный в таблице students_info,и столбец students_grades.N должен быть внешним ключом, ссылающимся на первый. В качестве альтернативы, сделайте так, чтобы он ссылался на столбец ID и не вводите дополнительный искусственный ключ в students_info.

0 голосов
/ 02 ноября 2019

Если я думаю правильно, вы ищете скрипт, как показано ниже. Но в соответствии с вашими примерами вы в основном получите значение NULL как в поле «Тема», так и в поле «Оценка» для блогов Джо, поскольку строка содержит столбец «2 в N» в таблице Students_grades, в основном, не содержит данных в других столбцах.

SELECT
A.NAME,
A.ID,
A.DEPARTMENT,
B.SUBJECT,
B.GRADE
FROM students_info A
INNER JOIN students_grads B
ON A.N = B.N
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...