select a.arno, b.lname, c.lname as shiplname; from ar a left join address b on a.id_addr = b.id_addr,; ar a left join address c on a.id_ship=c.id_addr ; into cursor temp whcih doesnt work, so I select a.arno, b.lname, c.lname as shiplname; from ar a left join address b on a.id_addr = b.id_addr, address c ; where a.id_ship = c.id_addr; union (select a.arno, b.lname, c.lname as shiplname; from ar a left join address c on a.id_ship=c.id_addr, ; address b where a.id_ship = 0 and a.id_addr = b.id_addr); into cursor tempinstead. I don't like and will keep looking however. There are few times when this "Optional Foreign Key" get in my way so I won't need to do this to often. Thanks for your help, though!