Informix Error -2993: There is a circular join path specified in the form.
Cause and resolution
There is a circular join path specified in the form.
This form defines a series of three or more joins such that table A joins to table B, table B joins to table C, and table C joins to table A. The circularity might not be obvious due to the use of table-alias names. Review all the statements in the ATTRIBUTES section and any COMPOSITES statements, and draw a diagram of the join relationships. Then modify the form so that no circular joins are created.
Oninit® Troubleshooting Guidance
Reasons / Common Causes
-2993 fires when a form defines a series of three or more joins that loop back on themselves (table A joins to B, B joins to C, and C joins back to A) — per the official guidance, this circularity might not be obvious due to the use of table-alias names.
- A chain of joins across
ATTRIBUTES/COMPOSITESstatements that loops back to its starting table, per the official guidance — the direct, only cause. - Table aliases obscuring the loop, per the official guidance — a named reason the circularity can be hard to spot.
Solutions / Resolution
- Review all the statements in
ATTRIBUTESand anyCOMPOSITESstatements, per the official guidance. - Draw a diagram of the join relationships, per the official guidance.
- Modify the form so that no circular joins are created, per the official guidance.
Examples
A circular join
ATTRIBUTES
a = tableA.key, tableB.a_key;
b = tableB.key, tableC.b_key;
c = tableC.key, tableA.c_key;
-- -2993: A -> B -> C -> A forms a loop
Corrected
Break the loop by removing or redirecting one of the join legs — for example, joining C directly to B's already-resolved data instead of back to A.
Diagnostic Checks
- Diagram the join relationships expressed across
ATTRIBUTESandCOMPOSITES, tracing through any table aliases, and confirm no cycle exists.
Related Errors / Related Topics
- -2994 — "The form has exceeded the maximum number of joins between tables." A related join-limit error, about too many joins overall rather than the joins forming a cycle.
Three or more joins in the form loop back to their starting table — diagram the relationships and break the cycle.