mysql - 等于这个右连接的左连接是什么?
问题描述
先谢谢了。
我的右连接工作正常,但是当我尝试将其更改为左连接时出现错误。
问题是从名为 SC 的分数学生表中获取有关学生表学生的所有信息,这些学生在 class1 中的分数高于 class2 分数。
学生(SId、Sname、Sage、Ssex)
SC(SId,CId,分数)
这是我的正确加入:
SELECT * FROM Student RIGHT JOIN (
SELECT t1.SId, class1, class2 FROM
(SELECT SId, score as class1 FROM sc WHERE sc.CId = '01')AS t1,
(SELECT SId, score AS class2 FROM sc WHERE sc.CId = '02')AS t2
WHERE t1.SId = t2.SId
AND t1.class1 > t2.class2
)r
ON Student.SId = r.SId;
然后我尝试了类似的东西:
SELECT t1.SId, class1, class2, Student.* FROM
(SELECT SId, score as class1 FROM sc WHERE sc.CId = '01')AS t1,
(SELECT SId, score AS class2 FROM sc WHERE sc.CId = '02')AS t2
WHERE t1.SId = t2.SId
AND t1.class1 > t2.class2
)r
LEFT JOIN Student
ON Student.SId = r.SId;
但它没有用。
我对 SQL 很陌生,希望你能解释一下。
我正在使用 MySQL5.7
解决方案
一般来说,如果你有一个右连接查询:
SELECT select_statement
FROM table1
RIGHT JOIN table2
ON join_condition;
您只需将其更改为左连接查询,如下所示:
SELECT select_statement
FROM table2
LEFT JOIN table1
ON join_condition;
对于您的情况,当您将查询更改为左连接时,您更改了 select_statement,它会出错。
只需将上述内容应用于您的查询:
SELECT *
FROM (
SELECT t1.SId, class1, class2
FROM
(SELECT SId, score as class1 FROM sc WHERE sc.CId = '01') AS t1,
(SELECT SId, score AS class2 FROM sc WHERE sc.CId = '02') AS t2
WHERE t1.SId = t2.SId
AND t1.class1 > t2.class2
) r
LEFT JOIN Student
ON Student.SId = r.SId;
推荐阅读
- javascript - 如何在 JS Find 函数中使用条件
- java - open-saml 3 缺少工件
- node.js - 如何用 sinon 存根 oracledb?
- linux - 分析被黑网站日志:上传文件时./etc 和./tmp 之间是否有任何链接?
- eclipse - 来自eclipse的spark scala maven构建错误-对象X不是包Y的成员
- macos - Mac w/PostgreSQL 刷新/清空缓存用于性能调整
- python - cmake调用python脚本并验证
- sql - 更改 Power BI 数据集的 SQL 表设计
- sql - Microsoft Access 表显示为空白,但查询正确地从表中提取数据
- azure - .NET Core 2.0 HttpClient Singleton 抛出 502