Как сделать SQL-запрос, используя две таблицы - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть 3 таблицы T1, T2 и T3. Таблица T1 содержит 2 столбца (ключ, класс / студент). Столбец class / student содержит как классы, так и учеников, например: 'english', 'math', 'mark', 'tom' ... Таблица T2 содержит 2 столбца (class, student). В каждом классе более одного ученика, и в этих 2 столбцах используются ключи от T1. В Таблице T3 я хочу вставить определенный класс с его учеником (классами) в столбец A и учеником в столбец B. Зная, что в этих столбцах используются ключи из таблицы T1, я пробовал это, но это возвращает один и тот же конкретный класс со своими учениками несколько раз:

INSERT INTO T3 (A,B) 
    SELECT m.class, m.student 
    FROM T1 b,T2 m
    WHERE m.class = (SELECT key FROM T1 WHERE class/student='English') 
      AND b.KEY = m.student;

результат, который я получаю: 1 - идентификатор класса английского языка, 10 - идентификатор оценки студента, 11 - идентификатор студента Тома

enter image description here

таблица T1:

enter image description here

Таблица T2:

enter image description here

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

Здесь у вас есть простой код и просто одна операция соединения, что положительно влияет на производительность:

insert into t3 
WITH spec_class AS
(select key from T1 where class_student='English')
SELECT m.class, m.student 
FROM T2 m inner join spec_class sp on m.class=sp.key;
1 голос
/ 12 апреля 2019

Поскольку ваша основная таблица T1 содержит сведения как о классе, так и об ученике, я бы порекомендовал объединить ее дважды с таблицей class2student_map T2, чтобы получить подробности:

INSERT INTO T3 (A,B) 

SELECT "class_master"."key", "student_master"."key"
FROM 
T2 "class_student_map"
INNER JOIN
T1 "class_master"
ON
"class_master"."key" = "class_student_map"."class"
AND
"class_master"."class/student" = 'English'
INNER JOIN
T1 "student_master"
"student_master"."key" = "class_student_map"."student";
...