我有两张桌子,例如table_1和table_2。我想从table_2中选择带有来自table_1的id的外键,但table_2中的外键值是table_1中带有前缀的id。
table_1.id = 1
table_2.fk_id = fk1
如何为id添加值,以便我可以选择fk?
谢谢!
彼得
答案 0 :(得分:3)
你可以这样做
SELECT * FROM table_1 INNER JOIN table_2 ON CONCAT('fk',CAST(table_1.id AS CHAR))=table_2.fk_id)
然而,这将是非常缓慢的。我建议使用table2上的更新查询将所有fkX ID更改为X,或者在table1上创建计算列,创建添加了fk前缀的id。
它之所以慢的原因是因为无法使用索引完成连接。当您将密钥类型更改为可直接比较时,可以将它们编入索引并加快连接速度。
答案 1 :(得分:0)
这里的真正问题是它不是真正的外键。它根本不具备可执行性。我想我可以假设你正在使用MyISAM表吗?
你应该让它们完全相同,并考虑添加一个额外的列来存储前缀