如何在不丢失 SQL 中的任何行的情况下合并两个表?
Posted
技术标签:
【中文标题】如何在不丢失 SQL 中的任何行的情况下合并两个表?【英文标题】:How can you merge two tables without losing any of the rows in SQL? 【发布时间】:2017-04-30 02:29:16 【问题描述】:我正在尝试合并两个表。 student
表和department
表,但我不想失去任何没有学生的部门。当我使用NATURAL JOIN
时,我会丢失它们,因为主键是DEPT_ID
并且某些部门没有学生,因此它们不会出现在合并表中。我也尝试过寻找其他方法来合并到目前为止我没有任何运气的表。
我的尝试:
SELECT DEPT_NAME,
COUNT(DISTINCT STUDENT_ID) AS NumberOfStudentsInDepartment
FROM Students RIGHT JOIN Departments
GROUP BY DEPT_NAME
ORDER BY 2 DESC, 1 ASC;
【问题讨论】:
“左连接”也许?除非我误解了您的意思的“合并”。如果您提供一些代码会有所帮助。 如果您使用的是natural join
,那么您没有使用 SQL Server。我删除了标签。
【参考方案1】:
使用右连接
Select * from Students S RIGHT JOIN Department D on D.Dept_Id = S.Dept_id
或左加入
Select * from Department D LEFT JOIN Students S on D.Dept_Id = S.Dept_id
Learn more about how joins work here
【讨论】:
这么快的跟进问题。我试图找出每个部门的学生总数。当我使用普通的NATURAL JOIN
时,它工作得很好。但是,使用RIGHT JOIN
时出现错误。你知道为什么会破坏它吗?我的查询在问题中。
GROUP BY DEPT_NAME * 第 4 行出现错误:ORA-00905:缺少关键字
@NatashaAlexandrov 你在 oracle db 上运行它吗?但我给了mysql的答案
我处于其中一种在线编码环境中(例如 HackerRank、HackerEart)。我刚刚意识到它被设置为Oracle。当我将其更改为 MySQL 时,它说:ERROR 1064 (42000) at line 1: [stuff about manual] 'GROUP BY DEPT_NAME ORDER BY 2 DESC, 1 ASC' at line 4
@NatashaAlexandrov 使用 GROUP BY D.DEPT_NAME
以上是关于如何在不丢失 SQL 中的任何行的情况下合并两个表?的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server,如何在不丢失数据的情况下创建表后设置自动增量?
如何在没有任何重复行的情况下连接 cognos 中的两个表?