объединить 2 столбца из разных таблиц

#sql #oracle #oracle-sqldeveloper

#sql #Oracle #oracle-sqldeveloper

Вопрос:

Используя приведенный ниже запрос, я пытаюсь получить db_unique_name из v $database в сочетании со столбцом ПРИВИЛЕГИЙ DBA_PRIV_AUDIT_OPTS.Но я получаю сообщение об ошибке «ORA-00918: столбец определен неоднозначно».Пожалуйста, предложите.Спасибо.

 select db_unique_name||':'||PRIVILEGE DB_NAME_PRIV,PROXY_NAME,PRIVILEGE,SUCCESS,FAILURE from
(SELECT d.PRIVILEGE,d.PROXY_NAME,d.PRIVILEGE,d.SUCCESS,d.FAILURE from DBA_PRIV_AUDIT_OPTS d
where d.PRIVILEGE in ('AUDIT SYSTEM','AUDIT ANY','ALTER SYSTEM','GRANT ANY ROLE','GRANT ANY PRIVILEGE','GRANT ANY OBJECT PRIVILEGE','CREATE USER','ALTER USER','DROP USER')),v$database;
  

Ответ №1:

Вы указали d.privilege дважды, поэтому просто удалили лишний:

 select db_unique_name||':'||PRIVILEGE DB_NAME_PRIV,PROXY_NAME,PRIVILEGE,SUCCESS,FAILURE from
(SELECT d.PRIVILEGE,d.PROXY_NAMEd.SUCCESS,d.FAILURE from DBA_PRIV_AUDIT_OPTS d
where d.PRIVILEGE in ('AUDIT SYSTEM','AUDIT ANY','ALTER SYSTEM','GRANT ANY ROLE','GRANT ANY PRIVILEGE','GRANT ANY OBJECT PRIVILEGE','CREATE USER','ALTER USER','DROP USER')),v$database;
  

Кроме того, почему бы просто не обойтись без подзапроса?

 select db_unique_name||':'||PRIVILEGE DB_NAME_PRIV,PROXY_NAME,PRIVILEGE,SUCCESS,FAILURE 
from DBA_PRIV_AUDIT_OPTS d, v$database
where d.PRIVILEGE in (
         'AUDIT SYSTEM','AUDIT ANY','ALTER SYSTEM'
        ,'GRANT ANY ROLE','GRANT ANY PRIVILEGE'
        ,'GRANT ANY OBJECT PRIVILEGE','CREATE USER'
        ,'ALTER USER','DROP USER'
      );