[英]how do i write SQL Query for getting following output from two tables (With Nodejs)
表一:老师
+------+--------------+
| id | Teacher_name |
+------+--------------+
| 1 | M |
| 2 | S |
+------+--------------+
表 2:学生
+------+--------------+
| id | Subject_name |
+------+--------------+
| 1 | English |
| 1 | Marathi |
| 1 | Hindi |
| 2 | Biology |
| 2 | Physics |
| 2 | History |
+------+--------------+
我需要像这样的输出
[
{
"Teacher_name": "M",
"Subjects": [
{
"Subject_name": "english"
},
{
"Subject_name": "marathi"
},
{
"Subject_name": "hindi"
}
]
},
{
"Teacher_name": "S",
"Subjects": [
{
"Subject_name": "biology"
},
{
"Subject_name": "physics"
},
{
"Subject_name": "history"
}
]
}
]
您不能在重复的 sql 表中拥有 ID。 例如,students 表有多个 ID 为 1 和多个 ID 为 2。您可以有一个标记为“ID”的列,但实际上它不是一个 ID,但这相当于错误标记,并且会让其他任何看过的人感到困惑在桌子上。 这些表的实际结构是什么? 为了在这些表之间创建关系,您需要在学生表中有一列引用教师,因为Teachers and Students
之间分别存在One to Many
关系。 即,“一个老师可以有很多学生”。
+------+--------------+
| id | Subject_name | Teacher
+------+--------------+
| 1 | English | 1
| 2 | Marathi | 1
| 3 | Hindi | 1
| 4 | Biology | 2
| 5 | Physics | 2
| 6 | History | 2
+------+--------------+
然后你会使用类似于这样的“内部连接”:
SELECT Subject_name, Teacher_name FROM Students INNER JOIN teacher ON (teacher.id = Students.teacher);
这将返回:
+--------------+
| Subject_name | Teacher
+--------------+
| English | M
| Marathi | M
| Hindi | M
| Biology | S
| Physics | S
| History | S
+--------------+
此外,您需要的输出需要消化该查询的输出,然后使用该信息构建一个对象或数组。 此外,“Subject_name”的任何表中都没有字段,因此除非您有备用数据源或另一个表,否则基本上必须手动填充该字段。
教师和科目之间似乎也存在one to many
的关系,也就是说......“教师可以教很多科目”所以你可能需要这样的表格。
称表为“主题”
Teacher_name | Subject_name
M | english
M | marathi
M | hindi
S | biology
S | physics
S | history
然后查询将简单地select * from Subjects;
或者,如果您希望记录是唯一可识别的。
ID | Subject_name | Teacher
1 | english | 1
2 | marathi | 1
3 | hindi | 1
4 | biology | 2
5 | physics | 2
6 | history | 2
然后,您将使用类似的内部联接,例如:
SELECT Teacher_name, Subject_name FROM Subjects INNER JOIN teacher ON (teacher.id = Subjects.teacher);
将产生以下结果:
Subject_name | Teacher
english | M
marathi | M
hindi | M
biology | S
physics | S
history | S
node.js 部分只是创建一个连接并为其提供正确的 sql 字符串。 一个例子: https ://www.w3schools.com/nodejs/nodejs_mysql_select.asp
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
con.query("SELECT * FROM customers", function (err, result, fields) {
if (err) throw err;
console.log(result);
});
});
不过,这一切都取决于您的表结构。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.