Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用3个联接进行分组_Sql_Oracle - Fatal编程技术网

Sql 使用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

我正在努力处理这个查询,因为我想从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 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:只是你不会调用另一个表的ID
ID
,因为这个名字表明它是表本身的ID。你不应该再使用连接语法了。二十多年前,由于某种原因,它被裁掉了。使用正确的ANSI连接(
来自表2连接表1…
)。如果两个表都使用相同的ID,为什么不将数据放在一个表中呢?最后,可能会使查询变得更直截了当一些,但为了了解这一点,我们必须更多地了解表、它们的键、它们的内容。@ThorstenKettner-当然,
id
可能在一个表中是PK,在另一个表中是FK。这没什么奇怪的(如果是这样的话)。@mathguy:只是你不会调用另一个表的ID
ID
,因为这个名字表明它是表本身的ID。