我需要将一个表与另一个表连接起来,对于左表中的每种类型的组,我在第二个表中得到了这个值类型的总和,其中group_type = 4。 我试过以下:
SELECT *
FROM orbiting_group_types ogt
LEFT JOIN
(SELECT SUM(val)
FROM report_orbiting_vals rov
ORDER by TYPE
WHERE rov.orbiting_group_type_id = 4)
ON ogt.id = rov.orbiting_group_type_id
然而它给我一个错误 -
syntax error at or near "WHERE"
LINE 8: WHERE rov.orbiting_group_type_id = 4)
我错过了什么?
答案 0 :(得分:3)
您没有为子查询设置别名,并且子查询不会选择您在主查询中加入的字段。正如其他提到的那样,子查询中的order by
将不起作用。
我怀疑你正在寻找一个结果:
SELECT *
FROM orbiting_group_types ogt
LEFT JOIN
(SELECT SUM(val), orbiting_group_type_id
FROM report_orbiting_vals rov
WHERE rov.orbiting_group_type_id = 4
group by orbiting_group_type_id) as rov
ON ogt.id = rov.orbiting_group_type_id
注意as rov
,group by
,选择子查询中的第二列以及order by
的删除。
答案 1 :(得分:2)
试试这个:
SELECT *
FROM orbiting_group_types ogt
LEFT JOIN
(SELECT SUM(val)
FROM report_orbiting_vals subrov
WHERE subrov.orbiting_group_type_id = 4
//ORDER by TYPE
) rov
ON ogt.id = rov.orbiting_group_type_id
1)您应该命名子查询以引用它们。您无法从子查询的外部向内部进行引用。
2)TYPE听起来不像列名
3)ORDER BY总是在WHERE之后。
答案 2 :(得分:0)
通常order by
子句必须在where
子句之后。此外,order by
在子查询中毫无意义 - 在这种情况下,我怀疑你的意思是group by
。