in that case I would suggest you a recursive approach:
(pseudo-code):
Code:
first make a copy of hay
# the external loop remains
while read needle; do
# look for this needle
grep -m1 [-F] " $needle " hay
# drop lines containing this needle
grep -v " $needle " hay > hay1
mv hay1 hay
done < needles >> results