MYSQL基于列数据和表名连接表

use*_*347 10 mysql join polymorphic-associations

我想知道这是否可行.

我希望根据表1的数据加入2个表.示例表1包含列食物,其数据为"热狗".

我有一张叫热狗的桌子.

是否可以像JOIN一样进行JOIN.

SELECT * FROM table1 t join t.food on id = foodid
Run Code Online (Sandbox Code Playgroud)

我知道它不起作用,但它甚至可行,是否有一个工作周围?

提前致谢.

Bil*_*win 11

不,你不能每行加入一个不同的表table1,甚至不能使用@Cade Roux建议的动态SQL.

您可以加入hotdog餐桌,查看食物是"热狗"的行,并加入其他餐桌以获取其他特定食物价值.

SELECT * FROM table1 JOIN hotdog ON id = foodid WHERE food = 'hotdog'
UNION
SELECT * FROM table1 JOIN apples ON id = foodid WHERE food = 'apples'
UNION
SELECT * FROM table1 JOIN soups  ON id = foodid WHERE food = 'soup'
UNION 
...
Run Code Online (Sandbox Code Playgroud)

这要求您了解食物的所有不同值,并且所有相应的食物表都具有相容的列,因此您可以将它们联合起来.

你正在做的是多态关联.也就是说,table1多个"父"表中引用行中的外键,具体取决于另一列中的值table1.这是关系数据库程序员常见的设计错误.

对于替代解决方案,请参阅我的答案:

我还在我的演示文稿中介绍了面向实用面向对象模型的SQL中的多态关联解决方案,以及我的书" SQL Antipatterns:避免数据库编程的陷阱".