We have a very repetitive need to execute UPDATE commands in our Database where only one table is updated, but two additional tables need to be referenced. I've been doing SQL for a long time, but have always seemed to just stick with the basics. I've never used JOINs before. Indexes aside, I'm thinking my SQL in general is inefficient and was hoping if someone could let me know if they think Statement 2 below is not only identical to Statement 1 (currently using this format), but is also more efficient? Statement 1
Statement 2
Any help would be greatly appreciated :) Anthony Mangione (amangione@jatsoftware.com) asked 11 Nov '10, 16:18 Anthony Mang... Mark Culp |
To be semantically equivalent, the second query should read
As you surmised, the two UPDATE statements are semantically equivalent (if the latter is rewritten as above). They are also both optimized in exactly the same way - neither will be more efficient than the other. You can determine the access plan used by either statement by viewing the graphical plan for the statement via DBISQL (SHIFT+F5). To improve performance, appropriate indexes may need to be defined on the columns involved in joining the three tables together, or as well on one or both of COL_2 and COL_6 to efficiently support the comparisons with the string literals "ABC". answered 11 Nov '10, 21:07 Glenn Paulley @Glenn: Would the first query fail whereas the second would work when the user is missing UPDATE permission on TABLE_V and TABLE_L? Or are such permission checks done after the statement is rewritten (when it's known that there's no attempt to update those tables)? |
While I would strongly recommend the 2nd form, the 1st form seems to have some errors (e.g. a doubled "AND"). Furthermore, it's hard to tell whether COL_3 is only existing in TABLE_V without knowing the database schema... Could you re-check these statements and possibly format them a bit more similar?