Kindly help me with writing SQL/400 statement for the following scenario:
MAIN file: record number, customer number
temp file: record#, corrected cust#
How can I update MAIN file using record# in both files? Thank you for your advice.
Update each row in MAIN with a value from the matching row in temp --
update MAIN set cust# = ( select cust# from temp where record# = MAIN.record# )
The subquery here is a scalar subquery, and must return only one value (i.e. it selects only one column and must return only one row), or else it will cause an error and the entire UPDATE will fail. The WHERE clause of the subquery makes it a correlated subquery, and the way to understand how this works is to imagine that the subquery is evaluated separately for each row of the MAIN table. So for any given row in the MAIN table, the subquery returns any row(s) from the temp table with a matching record number -- if there is more than one matching row, you get an error, but I'll assume that the record number is unique and this won't happen.
Now note that there is no WHERE clause on the UPDATE statement. This means that every row will be updated. If there is any row in MAIN that does not have a matching row in temp, what happens when the subquery is evaluated? The subquery will return a NULL, and this is what the MAIN customer number will be set to. So if there are unmatched rows in MAIN, and you do not want the customer number set to NULL, then you have to qualify which rows of MAIN are to be updated, like this --
update MAIN set cust# = ( select cust# from temp where record# = MAIN.record# ) where exists ( select cust# from temp where record# = MAIN.record# )
For More Information
- What do you think about this answer? E-mail the edtiors at editor@searchDatabase.com with your feedback.
- The Best SQL Web Links: tips, tutorials, scripts, and more.
- Have an SQL tip to offer your fellow DBAs and developers? The best tips submitted will receive a cool prize. Submit your tip today!
- Ask your technical SQL questions -- or help out your peers by answering them -- in our live discussion forums.
- Ask the Experts yourself: Our SQL, database design, Oracle, SQL Server, DB2, metadata, object-oriented and data warehousing gurus are waiting to answer your toughest questions.