Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL连接一个表,该表的名称作为字段值存储在另一个表中_Mysql - Fatal编程技术网

MYSQL连接一个表,该表的名称作为字段值存储在另一个表中

MYSQL连接一个表,该表的名称作为字段值存储在另一个表中,mysql,Mysql,我试图在MYSQL中构建一个动态查询,以连接一个表,该表的名称作为字段值存储在另一个表上,如下所示: SELECT * FROM CATEGORIES INNER JOIN CATEGORISATIONS ON CATEGORISATIONS.id = CATEGORIES.fk_categorisation INNER JOIN [CATEGORISATIONS.nom_table] LV_REGIONS ON LV_REGIONS.id = CATEGORIES.valeur 有答案吗

我试图在MYSQL中构建一个动态查询,以连接一个表,该表的名称作为字段值存储在另一个表上,如下所示:

SELECT * FROM CATEGORIES 
INNER JOIN CATEGORISATIONS ON CATEGORISATIONS.id = CATEGORIES.fk_categorisation
INNER JOIN [CATEGORISATIONS.nom_table] LV_REGIONS ON LV_REGIONS.id = CATEGORIES.valeur

有答案吗

我假设您正在尝试获取“[CATEGORISATIONS.nom_table]”以解析为表名


在这种情况下,您可以尝试使用一个子查询,该子查询将只解析为一个表名(因此是一个包含一行和一列的结果集)。我不确定MySQL是否会接受该表的字符串名称,但值得一试。

我的第一个建议是找到设计该模式的人,并给他们一本关于关系数据库设计的好书

从这里开始,您可以从两个方向中选择一个:第一个方向是通过将CATEGORIZATIONS.nom_表命名的单独表加载到一个可以直接查询的区域表中,来撤消模式中的混乱


或者,您需要将该查询分解为多个部分,使用第一个内部联接的结果构造一个联合查询来执行第二个内部联接。

也许执行此操作的人知道这确实不是一个好的设计实践。。。但有时你不得不做些糟糕的事情来做你想做的事

从我对这个主题的了解来看,我认为你不可能只用一个SELECT查询就能做到这一点


可能在存储过程中…

我以前尝试过使用子查询返回的mysql表值作为字段名,但没有成功。我无法让mysql接受记录集值作为字段名。不幸的是,我不得不使用php来完成这项任务。

您应该构建动态SQL

比如:


这个字段的用途是CATEGORISATIONS.nom_table可以引用整个架构中的任何一个表,而无需在每个表之间创建关联表。这就是我将要做的,直到有一天有人告诉我在mysql查询中如何做。
select CATEGORISATIONS.nom_table into @tmp FROM ...;
PREPARE stmt1 FROM "SELECT * FROM ... INNER JOIN @tmp ..."; 
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;