如何使用两个表进行sql查询
我有三张桌子T1、T2和T3。表T1包含两列(键、类/学生)。“班级/学生”列包含班级和学生,例如:“英语”、“数学”、“马克”、“汤姆”。。。表T2包含两列(班级、学生)。每个类中都有多个学生,这两列使用T1中的键。在表T3中,我想在列a和列B中插入一个特定类及其学生-类。知道这些列使用T1表中的键,我已经尝试过,但它多次返回同一个特定类及其学生:如何使用两个表进行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
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和网站的未来访问者。谢谢