I am new to Oracle and working with a fairly large database. I would like to perform a query that will select the desired columns, order by a certain column and also limit the results. According to everything I have read, the below query should be working but it is returning “ORA-00918: column ambiguously defined”:
SELECT * FROM(SELECT * FROM EAI.EAI_EVENT_LOG e,
EAI.EAI_EVENT_LOG_MESSAGE e1 WHERE e.SOURCE_URL LIKE '%.XML'
ORDER BY e.REQUEST_DATE_TIME DESC) WHERE ROWNUM <= 20
Any suggestions would be greatly appreciated 😀
The error message means your result set contains two columns with the same name. Each column in a query’s projection needs to have a unique name. Presumably you have a column (or columns) with the same name in both EAI_EVENT_LOG and EAI_EVENT_LOG_MESSAGE.
You also want to join on that column. At the moment you are generating a cross join between the two tables. In other words, if you have a hundred records in EAI_EVENT_LOG and two hundred records EAI_EVENT_LOG_MESSAGE your result set will be twenty thousand records (without the rownum). This is probably your intention.
No, you’ll still need to handle having two columns with the same name. Basically this comes from using
SELECT *on two multiple tables.SELECT *is bad practice. It’s convenient but it is always better to specify the exact columns you want in the query’s projection. That way you can include (say)e.TRANSACTION_IDand excludee1.TRANSACTION_ID, and avoid the ORA-00918 exception.