MYSQL连接一个表,其名称作为字段值存储在另一个表上

时间:2009-05-22 15:56:15

标签: 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

任何答案?!

5 个答案:

答案 0 :(得分:9)

您应该构建动态SQL http://dev.mysql.com/doc/refman/5.1/en/sql-syntax-prepared-statements.html

像:

select CATEGORISATIONS.nom_table into @tmp FROM ...;
PREPARE stmt1 FROM "SELECT * FROM ... INNER JOIN @tmp ..."; 
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;

答案 1 :(得分:2)

我的第一个建议是找到设计该架构的人,并为他们提供关于关系数据库设计的好书。

从那里,您可以选择以下两个方向之一:第一个是通过将CATEGORIZATIONS.nom_table命名的单独表加载到您可以直接查询的单个REGIONS表中来撤消模式中的混乱。 / p>

或者,您需要将该查询分成多个部分,使用第一个INNER JOIN的结果构造一个UNION查询来执行第二个INNER JOIN。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

也许这样做的人知道这不是一个好的设计实践......但有时你必须做出糟糕的黑客来做你想做的事......

根据我对该主题的了解,我认为只有SELECT查询才能实现这一点。

也许有存储过程......

答案 4 :(得分:1)

我曾尝试使用从子查询返回的mysql表值作为字段名称,但未成功。我永远不会让mysql接受记录集值作为字段名称。不幸的是,我不得不使用php完成这项任务。