关于mysql中子查询的问题

时间:2017-08-18 01:46:20

标签: mysql mysql-5.5

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');

1 个答案:

答案 0 :(得分:1)

它被称为Correlated Subquery

  

相关子查询是包含对a的引用的子查询   也出现在外部查询中的表。

您可以在此处阅读文档:https://dev.mysql.com/doc/refman/5.5/en/correlated-subqueries.html

如果id表中没有course字段,但父表id中有一个名为student的表,则会查找父字段。当它彼此具有相同的字段时,无需提供字段别名,就像JOIN一样。

但是当父表没有id字段时,它将返回错误

  

'字段列表'中的未知列'id'