2010-05-21 75 views
0

我有两个表,例如table_1和table_2。我想从table_2中选择来自table_1的id中的外键,但table_2中的外键值是来自table_1的具有前缀的id。在SELECT语句中将字符添加到foreign_key

table_1.id = 1个

table_2.fk_id = FK-

如何添加值的id,所以我可以选择FK?

谢谢!

彼得

回答

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。

速度慢的原因是因为使用索引无法完成连接。当您将键类型更改为可直接比较时,可以将它们编入索引并加快连接速度。

+0

这正是我一直在寻找! 谢谢! 彼得 – Sephen 2010-05-21 14:11:18

+0

+1因为解释'fk'刺痛是不好的! – 2010-05-21 14:13:32

0

这里真正的问题是,这不是一个真正的外键。它根本无法执行。我想我可以假设你在使用MyISAM表?

你真的应该让他们完全一样的价值,并考虑增加一个额外的列来存储前缀