Sql 将2个表中的数据合并到1个查询中

Sql 将2个表中的数据合并到1个查询中,sql,Sql,大家好 我在将两个表中的数据合并到一个查询中时遇到一些问题 现在,我有一个表-nr1,其中包含餐厅的原始数据,而在另一个表-nr2中,我有一些已经评级的餐厅 所以,现在我想选择所有餐厅,同时从表-nr2中选择该餐厅的等级,并得到这些等级的平均值 如何在单个SQL查询中执行此操作?您需要执行联接。在这种情况下,内部左连接听起来不错,这是默认连接。如果链接它们的字段在两侧都相同,则可以使用USING语法,因此最终会得到如下结果: SELECT r.*, COALESCE(

大家好

我在将两个表中的数据合并到一个查询中时遇到一些问题

现在,我有一个表-nr1,其中包含餐厅的原始数据,而在另一个表-nr2中,我有一些已经评级的餐厅

所以,现在我想选择所有餐厅,同时从表-nr2中选择该餐厅的等级,并得到这些等级的平均值


如何在单个SQL查询中执行此操作?

您需要执行联接。在这种情况下,内部左连接听起来不错,这是默认连接。如果链接它们的字段在两侧都相同,则可以使用USING语法,因此最终会得到如下结果:

SELECT  r.*,
        COALESCE(
        (
        SELECT  AVG(grade)
        FROM    table_nr2 g
        WHERE   g.restaurant_id = r.id
        ), 0)
FROM    table-nr1 r
SELECT table-nr1.*, AVG(table-nr2.score)
FROM table-nr1
JOIN table-nr2 USING (restrauntId)
SELECT table-nr1.*, AVG(table-nr2.score)
FROM table-nr1
JOIN table-nr2 ON (table-nr1.restrauntId = table-nr2.restrauntId)
否则,您可以使用类似以下内容的on子句将它们链接起来:

SELECT table-nr1.*, AVG(table-nr2.score)
FROM table-nr1
JOIN table-nr2 USING (restrauntId)
SELECT table-nr1.*, AVG(table-nr2.score)
FROM table-nr1
JOIN table-nr2 ON (table-nr1.restrauntId = table-nr2.restrauntId)

假设你的餐馆有名字和id,你的评论有等级

SELECT re.name, avg(ra.grade)
FROM table-nr1 re
LEFT JOIN table-nr2 ra ON re.id = ra.id
GROUP BY re.name

您需要按要选择的所有未聚合字段进行分组,left join表示您将获得所有餐厅,而不管它们是否有任何评级。

请提供数据库表的说明。我不确定您的说法,即“内部左联接”是默认联接类型,您可以使用左外部联接或内部联接,左和右联接用于指定在另一个表中找不到匹配行时,正在联接的两个表中的哪一个应返回行。。。我想今天早上我没在想。。。它只是一个内部连接。。。这是当你说“加入”时的默认值。有趣的备选方案为+1。尽管出于价值考虑,我通常避免在select子句中使用子查询。@康拉德:你能解释一下为什么要避免子查询吗?