我正在尝试在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
任何答案?!
答案 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完成这项任务。