Я так понимаю, вы хотите получить контент с помощью одного оператора select? Если макет ваших таблиц контента точно такой же, вы можете использовать UNION :
SELECT ca.* FROM contentaudio ca, indextable it
WHERE ca.content_id = it.content_id
AND it.content_type = 'audio'
UNION
SELECT cv.* FROM contentvideo cv, indextable it
WHERE cv.content_id = it.content_id
AND it.content_type = 'video'
ORDER BY content_id /* or whatever */
Обратите внимание, что если content_id
не является уникальным во всех ваших content
таблицах, вы можете получить несколько записей (разных типов) для одной и той же content_id
. Также обратите внимание, что если вы выбираете конкретную запись на основе некоторого ключа indextable
, вам нужно будет добавить его к каждой части объединения.
Если ваши content
таблицы имеют различные макеты, вы можете вместо этого использовать OUTER JOIN и извлекать различные типы контента как часть одной записи (пропущенные будут возвращены как Значения NULL):
SELECT * FROM indextable it
LEFT OUTER JOIN contentaudio ca ON it.content_id = ca.content_id
LEFT OUTER JOIN contentvideo cv ON it.content_id = cv.content_id
WHERE it.some_key = ?
Обратите внимание, что content_type
в этом случае вообще не задействован (и при этом он вам не нужен).