Только с динамическим SQL.Можно также объединить множество различных таблиц и использовать CASE на основе типа, но все таблицы должны быть известны заранее.
Было бы проще порекомендовать подходящий дизайн, если бы мы знали больше очто вы пытаетесь достичь, как выглядит ваш дизайн в настоящее время и почему вы выбрали именно этот дизайн таблицы.
Say you have a table of foods:
id INT
foodtype VARCHAR(50) (right now it just contains 'hotdog' or 'hamburger')
name VARCHAR(50)
Then hotdogs:
id INT
length INT
width INT
Then hamburgers:
id INT
radius INT
thickness INT
Обычно я бы рекомендовал какую-то систему для ограничения только одной вспомогательной таблицысуществует, но для простоты я опускаю это.
SELECT f.*, hd.length, hd.width, hb.radius, hb.thickness
FROM foods f
LEFT JOIN hotdogs hd
ON hd.id = f.id
AND f.foodtype = 'hotdog'
LEFT JOIN hamburgers hb
ON hb.id = f.id
AND f.foodtype = 'hamburger'
Теперь вы увидите, что такая вещь может быть сгенерирована кодом (или даже для очень медленного прототипа динамического SQL на лету) из SELECT DISTINCT foodtype FROM foods
учитывая определенные предположения об именах таблиц и доступе к метаданным таблиц.
Проблема заключается в том, что в конечном итоге тот, кто использует результат этого запроса, должен знать о появлении новых столбцов при каждом добавлении новой таблицы.
Таким образом, вопрос возвращается к вашему клиенту / потребителю данных - как это происходит?нг обрабатывать разные типы?И что значит для разных типов быть в одном наборе?И если ему необходимо знать о различных типах, в чем заключается недостаток простого написания разных запросов для каждого типа или изменения запроса вручную при добавлении новых типов, учитывая относительное влияние такого изменения в любом случае?