Wouldn't that simply be:
SELECT * FROM `research` WHERE `id` NOT IN (SELECT `research_id` FROM `research_done` WHERE `cid` = 1) AND `gold` < 999 AND `level` <= 1 AND (`required` = NULL || `required` IN (SELECT `research_id` FROM `research_done` WHERE `cid` = 1));
Or you can change to `required` != NULL, depending upon what you want to achieve.