1,首先,我的mysql版本是5.5.40
2,以下是表格数据:
mysql> select * from student;
+----+-----------+
| id | name |
+----+-----------+
| 1 | lily |
| 2 | lucy |
| 3 | nacy |
| 4 | hanmeimei |
+----+-----------+
4 rows in set (0.00 sec)
mysql> select * from course;
+------------+--------+
| student_id | course |
+------------+--------+
| 1 | title |
| 2 | title |
| 3 | title |
+------------+--------+
3 rows in set (0.00 sec)
3,为什么sql返回这个结果集,什么是子查询返回?当我将id替换为name时,我得到相同的结果。它是如何工作的?
mysql> select * from student where id in(select id from course);
+----+-----------+
| id | name |
+----+-----------+
| 1 | lily |
| 2 | lucy |
| 3 | nacy |
| 4 | hanmeimei |
+----+-----------+
4 rows in set (0.00 sec)
mysql> select * from student where name in(select name from course);
+----+-----------+
| id | name |
+----+-----------+
| 1 | lily |
| 2 | lucy |
| 3 | nacy |
| 4 | hanmeimei |
+----+-----------+
4 rows in set (0.00 sec)
4,这是我创建表和插入数据的代码:
CREATE TABLE `course` (
`student_id` int(11),
`course` varchar(20)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `course` VALUES ('1', 'title');
INSERT INTO `course` VALUES ('2', 'title');
INSERT INTO `course` VALUES ('3', 'title');
CREATE TABLE `student` (
`id` int(11),
`name` varchar(20)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `student` VALUES ('1', 'lily');
INSERT INTO `student` VALUES ('2', 'lucy');
INSERT INTO `student` VALUES ('3', 'nacy');
INSERT INTO `student` VALUES ('4', 'hanmeimei');
答案 0 :(得分:1)
它被称为Correlated Subquery。
相关子查询是包含对a的引用的子查询 也出现在外部查询中的表。
您可以在此处阅读文档:https://dev.mysql.com/doc/refman/5.5/en/correlated-subqueries.html
如果id
表中没有course
字段,但父表id
中有一个名为student
的表,则会查找父字段。当它彼此具有相同的字段时,无需提供字段别名,就像JOIN
一样。
但是当父表没有id
字段时,它将返回错误
'字段列表'中的未知列'id'