如何使用两个表进行sql查询

如何使用两个表进行sql查询,sql,join,oracle-sqldeveloper,Sql,Join,Oracle Sqldeveloper,我有三张桌子T1、T2和T3。表T1包含两列(键、类/学生)。“班级/学生”列包含班级和学生,例如:“英语”、“数学”、“马克”、“汤姆”。。。表T2包含两列(班级、学生)。每个类中都有多个学生,这两列使用T1中的键。在表T3中,我想在列a和列B中插入一个特定类及其学生-类。知道这些列使用T1表中的键,我已经尝试过,但它多次返回同一个特定类及其学生: INSERT INTO T3 (A,B) SELECT m.class, m.student FROM T1 b,T2 m

我有三张桌子T1、T2和T3。表T1包含两列(键、类/学生)。“班级/学生”列包含班级和学生,例如:“英语”、“数学”、“马克”、“汤姆”。。。表T2包含两列(班级、学生)。每个类中都有多个学生,这两列使用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是班级英语的id,10是学生成绩的id,11是学生汤姆的id

表T1:

表T2:


由于主表T1同时包含班级和学生详细信息,我建议将其与班级学生地图表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";

由于主表T1同时包含班级和学生详细信息,我建议将其与班级学生地图表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";

这里有简单的代码和一个连接操作,这对性能有积极的影响:

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;

这里有简单的代码和一个连接操作,这对性能有积极的影响:

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;

您需要熟悉
加入
,网上有大量信息,可以作为一个很好的起点。你需要理解这些概念,而不是来这里寻找答案。教一个人钓鱼总比给他一条鱼好,如果他能学会自学钓鱼就更好了。我已经编辑了我的帖子。你需要熟悉
加入
,网上有很多信息可以作为一个很好的起点。你需要理解这些概念,而不是来这里寻找答案。教一个人钓鱼比给他一条鱼要好,如果他能学会自学钓鱼就更好了。我编辑了我的postSQL错误:ORA-00904:“班级学生地图”。“班级”:无效标识符,加上T3中a和B是班级/学生的钥匙。你的第二点是正确的。我现在已经更新了查询。但是,错误表明,class\u student\u map引用的任何表(在本例中为T2)都没有属性class。你能再检查一次表名和属性名吗?我仍然没有发现查询有任何错误。所以,我现在刚刚编辑了它,在我使用alias的地方都有双引号。你现在可以试试吗?SQL错误:ORA-00904:“班级学生地图”。“班级”:无效标识符,加上T3中A和B是班级/学生的钥匙。你的第二点是正确的。我现在已经更新了查询。但是,错误表明,class\u student\u map引用的任何表(在本例中为T2)都没有属性class。你能再检查一次表名和属性名吗?我仍然没有发现查询有任何错误。所以,我现在刚刚编辑了它,在我使用alias的地方都有双引号。你现在能试试吗…?嗨!请解释为什么这是OPs代码的解决方案,因为不鼓励只回答代码。这将有助于OP和网站的未来访问者。谢谢你好请解释为什么这是OPs代码的解决方案,因为不鼓励只回答代码。这将有助于OP和网站的未来访问者。谢谢