How to fix Duplicate alias in PostgreSQL
PostgreSQL throws this error when a query uses the same alias name for multiple columns, table joins, or expressions. Fix it by ensuring each alias is unique within the query scope.
Quick fix
Fixes Duplicate alias
SELECT u.name AS name, c.name AS name FROM users u JOIN companies c ON u.company_id = c.id;- Identify all aliases in your query
- Rename duplicate aliases to be unique
- Use aliases in subsequent clauses correctly
- Test the modified query
SELECT u.name AS name, c.name AS name FROM users u JOIN companies c ON u.company_id = c.id;Duplicate alias
What this error means
The "Duplicate alias" error (error code 42712) occurs when PostgreSQL encounters two or more identically named aliases in a single query. Aliases provide alternative names for columns or tables, but each must be unique to avoid ambiguity. When PostgreSQL processes your query, it cannot determine which duplicate alias you're referring to in clauses like WHERE, ORDER BY, or JOIN conditions. This becomes especially problematic in complex queries with subqueries, CTEs, or multiple joins where the same table name or column name might be aliased multiple times with the same identifier.
Typical symptoms
- Query execution fails with "ERROR: duplicate alias" message
- Table aliases conflict when using multiple JOINs with the same alias name
- Subqueries or CTEs produce duplicate alias errors
- Columns with identical aliases cause result set ambiguity
- Application ORMs (Laravel, Yii) generate queries with duplicate aliases
Common causes
- Using the same alias name for multiple columns in the SELECT list
- Joining the same table multiple times without unique aliases
- Nested joins or subqueries reusing the same table alias
- Auto-generated queries from frameworks that don't properly alias repeated table references
- Complex CTEs (Common Table Expressions) with overlapping alias names
How to fix "Duplicate alias"
Review your SQL statement and list every alias you've created using AS. Look at:
- Column aliases in SELECT clauses
- Table aliases in FROM and JOIN clauses
- Subquery and CTE aliases
Example of problematic query:
SELECT u.name AS name, c.name AS name FROM users u JOIN companies c ON u.company_id = c.id;Give each alias a distinct, meaningful name that indicates what it represents. Use naming conventions that make the alias's purpose clear.
Fixed version:
SELECT u.name AS user_name, c.name AS company_name FROM users u JOIN companies c ON u.company_id = c.id;For multiple references to the same table:
SELECT p1.id AS parent_id, p2.id AS child_id FROM products p1 JOIN products p2 ON p1.id = p2.parent_id;Once you've renamed aliases to be unique, ensure any references in WHERE, ORDER BY, GROUP BY, or HAVING clauses use the new distinct alias names.
Example:
SELECT
u.id AS user_id,
u.name AS user_name,
c.name AS company_name
FROM users u
JOIN companies c ON u.company_id = c.id
WHERE u.active = true
ORDER BY user_name, company_name;Execute your query in the PostgreSQL client (psql) or your application to verify:
- No alias errors occur
- Results are correct and contain all expected columns
- Output column names are clear and descriptive
psql -U username -d database_name -c "SELECT ...";Advanced notes
PostgreSQL's handling of duplicate aliases has evolved over versions. In PostgreSQL 9.3.0, duplicate table aliases within nested JOINs were temporarily rejected due to the LATERAL patch, but this was restored in 9.3.2 to maintain backward compatibility. However, the best practice is always to use unique aliases to avoid confusion and ensure query portability. When working with frameworks like Laravel or Yii, update your query builder calls to properly alias repeated table references. If you're building dynamic queries, implement alias tracking to ensure each reference gets a unique identifier.
Frequently asked questions
- What does "Duplicate alias" mean?
- The "Duplicate alias" error (error code 42712) occurs when PostgreSQL encounters two or more identically named aliases in a single query. Aliases provide alternative names for columns or tables, but each must be unique to avoid ambiguity. When PostgreSQL processes your query, it cannot determine which duplicate alias you're referring to in clauses like WHERE, ORDER BY, or JOIN conditions.
- How do I fix "Duplicate alias"?
- PostgreSQL throws this error when a query uses the same alias name for multiple columns, table joins, or expressions. Fix it by ensuring each alias is unique within the query scope.
- What causes "Duplicate alias"?
- Using the same alias name for multiple columns in the SELECT list Joining the same table multiple times without unique aliases Nested joins or subqueries reusing the same table alias
- Is the "Duplicate alias" error serious?
- It is a medium-severity error โ more of a blocker than a risk. The steps above resolve it.
Official resources & further reading
- ๐PostgreSQL Official Documentation
- ๐PostgreSQL Error Codes(Official Docs)
- ๐PostgreSQL SELECT Documentation(Official Docs)