在MySQL中,distinct和group都可以正常工作,但是在Oracle中,它不能正常工作,并提供以下错误:
不同:
ORA-01791: not a SELECTed expression
分组依据:
ORA-00979: not a GROUP BY expression
我的代码是:
public function getOrgModules() {
$session_info = $this->session->userdata('logged_in');
$org = $session_info['ORG_ID'];
$org_group = $session_info['USERGRP_ID'];
$org_group_level = $session_info['USERLVL_ID'];
$user = $session_info['USER_ID'];
//$this->db->distinct('SA_ORG_MODULES.SA_MODULE_ID');
$this->db->select('SA_ORG_MODULES.SA_MODULE_NAME,ATI_MODULES.MODULE_NAME_BN,ATI_MODULES.MODULE_ICON, SA_ORG_MODULES.SA_MODULE_ID, ATI_MODULES.CATEGORY');
$this->db->from('SA_UGLW_MLINK');
$this->db->join('SA_ORG_MODULES', 'SA_UGLW_MLINK.SA_MODULE_ID = SA_ORG_MODULES.SA_MODULE_ID', 'left');
$this->db->join('ATI_MODULES', 'SA_ORG_MODULES.MODULE_IDS = ATI_MODULES.MODULE_ID', 'left');
$this->db->where('SA_UGLW_MLINK.USERGRP_ID', $org_group);
$this->db->where('SA_UGLW_MLINK.UG_LEVEL_ID', $org_group_level);
$this->db->or_where('SA_UGLW_MLINK.USER_ID', $user);
$this->db->where('SA_UGLW_MLINK.ORG_ID', $org);
$this->db->or_where('SA_UGLW_MLINK.CREATE_', "1");
$this->db->or_where('SA_UGLW_MLINK.READ', "1");
$this->db->or_where('SA_UGLW_MLINK.UPDATE_', "1");
$this->db->or_where('SA_UGLW_MLINK.DELETE_', "1");
$this->db->or_where('SA_UGLW_MLINK.STATUS', "1");
$this->db->group_by('SA_ORG_MODULES.SA_MODULE_ID');
$this->db->order_by("ATI_MODULES.SL_NO", "asc");
return $this->db->get()->result();
}
请帮助我。预先感谢
答案 0 :(得分:1)
希望这对您有帮助:
在您的select子句中将COUNT(SA_ORG_MODULES.SA_MODULE_ID)
添加到分组方式如下:
$this->db->select('SA_ORG_MODULES.SA_MODULE_NAME,
ATI_MODULES.MODULE_NAME_BN,
ATI_MODULES.MODULE_ICON,
SA_ORG_MODULES.SA_MODULE_ID,
ATI_MODULES.CATEGORY,
COUNT(SA_ORG_MODULES.SA_MODULE_ID)
');
答案 1 :(得分:1)
问题在于您要按SA_ORG_MODULES.SA_MODULE_ID
分组,但同时也要获取其他字段(SA_ORG_MODULES.SA_MODULE_NAME,ATI_MODULES.MODULE_NAME_BN,ATI_MODULES.MODULE_ICON, ATI_MODULES.CATEGORY
)。在GROUP BY
查询中,Oracle坚持认为,检索到的值要么是出现在GROUP BY
语句中的字段,要么是诸如SUM
,{{1}之类的聚合函数的结果。 }等。其他数据库不强制执行此要求。因此,您的查询完全有可能在MySQL中运行,并在Oracle中引发异常。