> I believe that when the query engine executes your statement, for each > row of purchased_items data it looks at, it will have to run the query > "SELECT ticket_number FROM purchases" scan those results and > determine if the current row matches. If it is in the list then it wil exclude > that row from the final results. I would find it very silly if mysql's query optimizer decided that the optimized way to execute the query is to execute "SELECT ticket_number FROM purchases" N times, where N is the number of rows in purchased_items. There is no reason why that query would be executed any more than one time.
FWIW, there is a correlated subquery version of this query (the example I gave is uncorrelated), and it would be the following: SELECT ticket_number FROM purchased_items a WHERE NOT EXISTS (SELECT * FROM purchases b WHERE a.ticket_number=b.ticket_number); I cannot say for certain that these two queries are not executed by mysql in the same manner, but I would be surprised if they were. I say this because you could alter my query and use an explicit set: SELECT ticket_number FROM purchased_items WHERE ticket_number NOT IN (112, 456, 942, 356, 623, 783); I would find it more likely that the above query is executed in the same way as my original solution. And, Emmet Bishop insightfully commented: > You're making the assumption that he's using 4.1.x. He > didn't state which version he's using so your solution > may be of no use to him. Good point. I often forget about which features are/were unimplemented in mysql. My apologies. -- Matt Warden Berry Neuroscience Lab Miami University http://mattwarden.com This email proudly and graciously contributes to entropy. -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]