Если вам нужно сделать это в SQL - что я бы не рекомендовал, если вы не можете доверять содержимому ТАБЛИЦЫ C - тогда вам нужно будет создать переменную, содержащую SQL-запрос, а затем выполнить этот SQL-запрос динамически. Как это сделать, будет полностью зависеть от вашей СУБД. Пример в MySQL (который предполагает, что TABLE C имеет только одну строку):
SELECT @sql:=CONCAT("SELECT ",field," FROM ",source) FROM TABLE_C;
PREPARE s1 FROM @sql;
EXECUTE s1;
Синтаксис SQL Server:
DECLARE @sql nvarchar(max)
SELECT @sql = "SELECT " + field + " FROM " + source FROM TABLE_C
EXEC sp_executesql @sql
GO
Поскольку в TABLE C, безусловно, будет более одной строки, вам придется выполнять итерации по TABLE C. Это можно сделать с помощью CURSOR, и опять точные детали будут зависеть от вашей СУБД.
Важно знать, что это очень опасно, если, как вы утверждаете, TABLE C создается из Интернета. Вы не можете гарантировать, что находится в полях FIELD и SOURCE: они могут быть заполнены атакой sql-инъекции любым человеком с небольшим знанием SQL. Что вам, возможно, понадобится сделать, это безопасно проверить, что содержимое таблицы C представляет собой фактические таблицы / столбцы с помощью мета-запросов базы данных с безопасными параметрами.