数据库 words 中有两张表: gradedwords 和 classedwords;
表 gradedwords 中有两列:word 和 grade;
表 classedwords 中有两列: word 和 class;
然后我新建了一个表 gradedandclassedwords,表中有三列:
word, grade 和 class;
现在我要查找出同时存在于表 gradedwords 和表 classedwords 中的 word,写入表 gradedandclassedwords 中,并匹配相应的 grade 和 class。
这个查询和插入的SQL语句要怎样写呢?
我参考下面的资料:
https://stackoverflow.com/questions/1430562/sql-selecting-rows-that-are-in-both-tables
写了如下语句:
insert into gradedandclassedwords (word)
select word from gradedwords intersect select word from classedwords;
但是这样只能插入 word,相应的 grade 和 class 要怎样写才能在一个语句里插入呢?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
你可以使用 INSERT INTO...SELECT
语句结合 INNER JOIN
来实现这个需求。这样可以在一个语句中同时查询出两个表中相同的 word
,以及各自对应的 grade
和 class
,然后将这些数据插入到 gradedandclassedwords
表中。以下是具体的 SQL 语句示例:
INSERT INTO gradedandclassedwords (word, grade, class)
SELECT gw.word, gw.grade, cw.class
FROM gradedwords gw
INNER JOIN classedwords cw ON gw.word = cw.word;
这段 SQL 代码的工作原理是: 1. 通过 INNER JOIN
在 gradedwords
(别名为 gw
)和 classedwords
(别名为 cw
)表之间进行连接,连接条件是两表中的 word
字段相等。 2. SELECT
子句选取需要的字段:gw.word
, gw.grade
, 和 cw.class
。 3. 最后,使用 INSERT INTO
将这些字段的值插入到 gradedandclassedwords
表中。
这样就可以在一个语句里完成查询匹配及插入操作了。