Details
-
Type:
Bug
-
Status:
Open
-
Priority:
Major
-
Resolution: Unresolved
-
Affects Version/s: None
-
Fix Version/s: None
-
Component/s: Query
-
Labels:None
-
Environment:MAMP on MacBook Pro 10.6.7, with Symfony 1.4.9
Description
When creating an UPDATE query, the table names are not aliased like in a SELECT statement. This causes ambiguous column names when JOINING in an UPDATE.
E.g.
$q = $this->createQuery('st')
->update('SomeTable st')
->set('st.position','st.position + 1')
->leftJoin('st.SomeOtherTable sot ON st.some_id = sot.id')
->where('st.id <> ?', $someId)
->andWhere('sot.some_column = ?', $someValue)
The generated SQL for this is :
UPDATE some_table
LEFT JOIN some_other_table sot ON st.some_id = sot.id
SET position = position + 1, updated_at = 2011-04-13 11:01:03, updated_at = 2011-04-13 11:01:03
WHERE (id <> 4 AND some_column = 7)
Clearly here "updated_at" and "id" are ambiguous columns. Why the tables are not automatically aliased with unique aliases like in a SELECT statement, and the aliases written before the column name ?
Thanks.
Activity
| Field | Original Value | New Value |
|---|---|---|
| Description |
When creating an UPDATE query, the table names are not aliased like in a SELECT statement. This causes ambiguous column names when JOINING in an UPDATE. E.g. $q = $this->createQuery('st') ->update('SomeTable st') ->set('st.position','st.position + 1') ->leftJoin('st.SomeOtherTable sot ON st.some_id = sot.id') ->where('st.id <> ?', $someId) The generated SQL for this is : UPDATE some_table LEFT JOIN some_other_table sot ON st.some_id = sot.id SET position = position + 1, updated_at = 2011-04-13 11:01:03, updated_at = 2011-04-13 11:01:03 WHERE id <> 4 Clearly here "updated_at" and "id" are ambiguous columns. Why the tables are not automatically aliased with unique aliases like in a SELECT statement, and the aliases written before the column name ? Thanks. |
When creating an UPDATE query, the table names are not aliased like in a SELECT statement. This causes ambiguous column names when JOINING in an UPDATE. E.g. $q = $this->createQuery('st') ->update('SomeTable st') ->set('st.position','st.position + 1') ->leftJoin('st.SomeOtherTable sot ON st.some_id = sot.id') ->where('st.id <> ?', $someId) ->andWhere('sot.some_column = ?', $someValue) The generated SQL for this is : UPDATE some_table LEFT JOIN some_other_table sot ON st.some_id = sot.id SET position = position + 1, updated_at = 2011-04-13 11:01:03, updated_at = 2011-04-13 11:01:03 WHERE (id <> 4 AND some_column = 7) Clearly here "updated_at" and "id" are ambiguous columns. Why the tables are not automatically aliased with unique aliases like in a SELECT statement, and the aliases written before the column name ? Thanks. |