March 15, 2010 at 10:03 pm
Hi.
How would I combine the following statements into one:
SELECT customer.customer_id
INTO #C
FROM Customer
WHERE Customer.active = 1 AND Customer.prospect = 0
UPDATE Orders SET hold = 1
WHERE ship is null AND order_type = 'ORDER'
AND customer_id NOT IN (Select customer_id FROM #C)
Thanks,
Mike
March 15, 2010 at 10:40 pm
What is the purpose of creating the temporary table #C? Are you using it anywhere else other than your second statement?
How to post data/code on a forum to get the best help - Jeff Moden
http://www.sqlservercentral.com/articles/Best+Practices/61537/
March 15, 2010 at 10:47 pm
Yes, I use it to do an insert into another table as well.
March 15, 2010 at 11:13 pm
Then, you can't replace your above statements with a single statement.
But i can give you a better way of doing the update without using the #C and which will not give you problems if you have NULL values as your customer_id
UPDATEO
SEThold = 1
FROMOrders O
WHEREship is null AND order_type = 'ORDER'
AND NOT EXISTS( SELECT * FROM Customer C WHERE C.active = 1 AND C.prospect = 0 AND O.customer_id = C.customer_id )
How to post data/code on a forum to get the best help - Jeff Moden
http://www.sqlservercentral.com/articles/Best+Practices/61537/
March 15, 2010 at 11:34 pm
Kingston D.
But i can give you a better way of doing the update without using the #C and which will not give you problems if you have NULL values as your customer_id
UPDATEO
SEThold = 1
FROMOrders O
WHEREship is null AND order_type = 'ORDER'
AND NOT EXISTS( SELECT * FROM Customer C WHERE C.active = 1 AND C.prospect = 0 AND O.customer_id = C.customer_id )
Is this faster?
Mike
March 15, 2010 at 11:42 pm
Not sure about the performance aspect. But this will help you avoid certain problems that are mentioned in the following link
http://www.sqlservercentral.com/blogs/never_say_never/archive/2010/1/28/in-and-not-in.aspx
How to post data/code on a forum to get the best help - Jeff Moden
http://www.sqlservercentral.com/articles/Best+Practices/61537/
March 17, 2010 at 7:24 am
mike 57299 (3/15/2010)
Kingston D.But i can give you a better way of doing the update without using the #C and which will not give you problems if you have NULL values as your customer_id
UPDATEO
SEThold = 1
FROMOrders O
WHEREship is null AND order_type = 'ORDER'
AND NOT EXISTS( SELECT * FROM Customer C WHERE C.active = 1 AND C.prospect = 0 AND O.customer_id = C.customer_id )
Is this faster?
Mike
This will be a bit more efficient:
UPDATEO
SEThold = 1
FROMOrders O
WHEREship is null AND order_type = 'ORDER'
AND NOT EXISTS( SELECT 1 FROM Customer C WHERE C.active = 1 AND C.prospect = 0 AND O.customer_id = C.customer_id )
[/quote]
Maybe?
update O
set hold = 1
from Orders O
inner join Customer C
on O.customer_id = C.customer_id
Where (C.active <> 1 AND C.prospect <> 0)
With proper indexes (customer_id on both tables), the execution plan seems to favor this solution.
-- You can't be late until you show up.
Viewing 7 posts - 1 through 6 (of 6 total)
You must be logged in to reply to this topic. Login to reply