首页 > 解决方案 > 等于这个右连接的左连接是什么?

问题描述

先谢谢了。

我的右连接工作正常,但是当我尝试将其更改为左连接时出现错误。

问题是从名为 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

标签: mysqlsqlleft-joinright-join

解决方案


一般来说,如果你有一个右连接查询:

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;

推荐阅读