ORA-01427single-row subquery returns more than one

今天改bug遇到了一个错误,如题.是别人改了我的sql,没经过严格的测试,后来发现改坏了.出错的语句如下 :
select
	    g.id, g.account_id, g.account_relationship_id
            , (select le.DISPLAY_NAME
               from g, lov_element le
               where g.GRIEVANCE_TYPE = le.VALUE
               and le.LOV_NAME = 'GRIEVANCE_TYPE') grievance_type
            , g.requestor_name, g.continue_coverage_flag
            , g.comments, g.creation_date, g.approved_flag, 
            p.first_name,p.id
		from
             account_relationship ar,g, person p ,account a

产生这个错误是由于子查询中的结果如果 返回结果有两个以上,就会导致oracle抛出这个错,因为查询条件不能支持多个查询参数.可以做如下修改:
select
	g.id, g.account_id, g.account_relationship_id
            , nvl(lov_list1.DISPLAY_NAME, ' ') as grievance_type
            , g.requestor_name, g.continue_coverage_flag
            , g.comments, g.creation_date, g.approved_flag, p.first_name, p.middle_initial, p.last_name, p.party_id
		from
			account_relationship ar,g, person p ,account a,
      (SELECT l.lov_name,l.display_name,l.value,enabled from lov_list l where (lov_name='GRIEVANCE_TYPE' and enabled='T')) lov_list1

要点是通过在where条件中加入需要查询的结果子集来将数据库中保存的value替换成页面上显示的display name

你可能感兴趣的:(oracle,sql)