It’s been a little while since I’ve messed with SQL and I’m picking it back up for a course. I need to create a table of table name, column name, constraint name, and constraint type for all tables with my user, but every time I try, I’m getting a missing right parenthesis error. Here’s my code so far:
x
SELECT table_name, column_name, constraint_name, constraint_type
FROM
(
SELECT a.table_name, a.column_name, a.constraint_name FROM all_cons_columns AS a
WHERE a.owner = '[my_user]'
AND a.table_name NOT LIKE 'APEX%'
AND a.constraint_name NOT LIKE 'BIN%'
ORDER BY a.table_name
) AS x
LEFT JOIN
(
SELECT b.constraint_name, b.constraint_type FROM all_constraints AS b
WHERE b.owner = '[my_user]'
AND b.table_name NOT LIKE 'APEX%'
AND b.constraint_name NOT LIKE 'BIN%'
ORDER BY b.constraint_name
) AS y
ON x.constraint_name = y.constraint_name
SQL Developer says it’s at the “AS a” in line 4 but I’m not finding much information scouring the web. Any help is much appreciated!
Advertisement
Answer
If you remove AS it works:
SELECT table_name, column_name, x.constraint_name, constraint_type
FROM (SELECT a.table_name, a.column_name, a.constraint_name
FROM all_cons_columns a
WHERE a.owner = '[my_user]'
AND a.table_name NOT LIKE 'APEX%'
AND a.constraint_name NOT LIKE 'BIN%'
ORDER BY a.table_name) x
LEFT JOIN (SELECT b.constraint_name, b.constraint_type
FROM all_constraints b
WHERE b.owner = '[my_user]'
AND b.table_name NOT LIKE 'APEX%'
AND b.constraint_name NOT LIKE 'BIN%'
ORDER BY b.constraint_name) y
ON x.constraint_name = y.constraint_name
but I suppose this query might be shorter and without left join, because it’s always matches:
select x.table_name,
x.column_name,
x.constraint_name,
y.constraint_type
from all_cons_columns x
join all_constraints y
on x.constraint_name = y.constraint_name
where x.owner = '[my_user]'
and x.owner = y.owner
and x.table_name NOT LIKE 'APEX%'
and x.constraint_name NOT LIKE 'BIN%'
order by x.table_name, x.constraint_name