Просто объедините обе таблицы и выберите нужное значение, используя IF.
SELECT items.yourcolumns,
IF(items.entitytype='video', urlid, textid) as result_id
FROM items
LEFT OUTER JOIN videos ON items.entityid=videos.urlid
LEFT OUTER JOIN instructions ON items.entityid=instructions.textid
WHERE itemid=something
Ваша реляционная модель нарушается, если ссылка столбца указывает на другую таблицу на основе значения другого столбца.
Лучше: есть две дополнительные таблицы: items_to_video
и items_to_instructions
, которые создают ссылку, где это необходимо
Правка: после двух минут лежания в постели и не думая об этом, я подумал оЭто.Конечно.
SELECT items.yourcolumns,
urlid as result_id
FROM items
JOIN videos ON items.entityid=videos.urlid
WHERE itemid=something AND items.entitytype='video'
UNION ALL
SELECT items.yourcolumns,
textid as result_id
FROM items
JOIN instructions ON items.entityid=instructions.textid
WHERE itemid=something AND items.entitytype<>'video'