Sql 使用3个联接进行分组
我正在努力处理这个查询,因为我想从3个表中获取值Sql 使用3个联接进行分组,sql,oracle,Sql,Oracle,我正在努力处理这个查询,因为我想从3个表中获取值 SELECT table1.cedtra as cedtra, table1.priape as priapetra, table1.segape as segapetra, table1.prinom as prinomtra, table1.segnom as segnomtra, table2.cedcon as cedcon, table2.ben as ben, table3.priape as p
SELECT
table1.cedtra as cedtra,
table1.priape as priapetra,
table1.segape as segapetra,
table1.prinom as prinomtra,
table1.segnom as segnomtra,
table2.cedcon as cedcon,
table2.ben as ben,
table3.priape as priapeben,
table3.segape as segapeben,
table3.prinom as prinomben,
table3.segnom as segnomben,
table3.fecnac as fecnac,
count(table1.cedtra) as numero
FROM table2, table1, table3
WHERE table2.id = table1.id
and table2.ben = table3.ben
and table2.doc = '12345'
and table2.codcit = '12345'
group by table1.cedtra, table2.ben, table1.cedtra, table1.priape, table1.segape, table1.prinom, table1.segnom, table3.priape, table3.segape, table3.prinom, table3.segnom, table3.fecnac
having count(table1.cedtra) > 3
我正在按我选择的字段进行分组,但这会引发以下错误:
ORA-00979:不是表达式组
我尝试使用别名,但得到了相同的结果
任何建议都将被采纳 否-您不是按
表2.cedcon进行分组,而是选择它
永远不要尝试在SELECT子句中使用列别名进行分组-group by是在SELECT之前处理的
也不需要在GROUP BY中两次显示同一列。否-您不是按照表2进行分组。cedcon
而是选择它
永远不要尝试在SELECT子句中使用列别名进行分组-group by是在SELECT之前处理的
也不需要在GROUP BY中显示同一列两次。尝试从您的选择列表中删除table1.cedtra as cedtra
,并从您的组中删除table1.cedtra
,尝试从您的选择列表中删除table1.cedtra as cedtra
,然后从您的分组中删除表1.cedtra
在分组中显示两次的是什么列?让我try@JoseRojas当前位置你问题的答案是我答案中的第一句话。您在GROUP BY中有两个列是table1.cedtra
,您不需要它,但这不是您出错的原因。@JoseRojas-而且,BobC的回答也很有道理。这并不是导致错误的原因,但如果您正在计算cedtra,按它分组(更不用说在group by中包含它两次)是没有意义的,当然,您也不应该选择它。在group by中显示两次的是哪个列?让我try@JoseRojas当前位置你问题的答案是我答案中的第一句话。您在GROUP BY中有两个列是table1.cedtra
,您不需要它,但这不是您出错的原因。@JoseRojas-而且,BobC的回答也很有道理。这并不是导致错误的原因,但如果您正在计算cedtra,则按它分组(更不用说在group by中包含两次)是没有意义的,当然,您也不应该选择它。您不应该再使用该联接语法。二十多年前,由于某种原因,它被裁掉了。使用正确的ANSI连接(来自表2连接表1…
)。如果两个表都使用相同的ID,为什么不将数据放在一个表中呢?最后,可能会使查询变得更直截了当一些,但为了了解这一点,我们必须更多地了解表、它们的键、它们的内容。@ThorstenKettner-当然,id
可能在一个表中是PK,在另一个表中是FK。这没什么奇怪的(如果是这样的话)。@mathguy:只是你不会调用另一个表的IDID
,因为这个名字表明它是表本身的ID。你不应该再使用连接语法了。二十多年前,由于某种原因,它被裁掉了。使用正确的ANSI连接(来自表2连接表1…
)。如果两个表都使用相同的ID,为什么不将数据放在一个表中呢?最后,可能会使查询变得更直截了当一些,但为了了解这一点,我们必须更多地了解表、它们的键、它们的内容。@ThorstenKettner-当然,id
可能在一个表中是PK,在另一个表中是FK。这没什么奇怪的(如果是这样的话)。@mathguy:只是你不会调用另一个表的IDID
,因为这个名字表明它是表本身的ID。