sql выбрать из таблицы имя, описанное в столбце - PullRequest
0 голосов
/ 19 сентября 2018

Я хочу выбрать из таблицы SQL, чье имя таблицы описано в другой таблице.

SELECT * 
FROM first_table t1 
WHERE EXISTS (SELECT * FROM t1.other_table t2 WHERE t1.other_table_id = t2.id)

Не могу найти решение этой проблемы!

Ценю любую помощь.

Ответы [ 3 ]

0 голосов
/ 19 сентября 2018
mysql> SELECT @other_table := other_table FROM first_table WHERE 1 = 1;
mysql> SET @s = CONCAT("SELECT * FROM ", @other_table);
mysql> PREPARE stmt FROM @s;
mysql> EXECUTE stmt;
mysql> DEALLOCATE stmt;

Здесь WHERE 1=1 следует изменить, чтобы он возвращал только одну строку в наборе результатов

0 голосов
/ 19 сентября 2018
  SELECT * 
   FROM first_table t1 
    WHERE EXISTS (SELECT * FROM other_table t2 WHERE t1.other_table_id = t2.id)
0 голосов
/ 19 сентября 2018

Решение

Вы можете использовать динамические переменные с запросами:

SET @table := (select tableName from test limit 1);
set @qry1:= concat('select * from ',@table);
prepare stmt from @qry1 ;
execute stmt ;

ИЛИ even:

set @qry1:= concat('select * from ', (select tableName from test limit 1));
select @qry1;
prepare stmt from @qry1 ;
execute stmt ;

Пример SQLFiddle: http://sqlfiddle.com/#!9/a787e3/1

Примечание: SqlFiddle не позволяет запускать execute в правом редакторе, поэтому мне пришлось использовать представление.

Отказ от ответственности / Примечания:

Вы должны очистить все входные данные таблицы tableName.Это сделано для того, чтобы никто не вставлял SQL в эту таблицу и выполнял ее.

Кроме того, обратите внимание, что в реальной базе данных мы имеем условие where в запросе выбора таблицы.

Пример:

set @qry1:= concat('select * from ', (select tableName from test where id='something'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...