我有两个表,例如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?
谢谢!
彼得
我有两个表,例如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?
谢谢!
彼得
你可以像下面这样做
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。
速度慢的原因是因为使用索引无法完成连接。当您将键类型更改为可直接比较时,可以将它们编入索引并加快连接速度。
这里真正的问题是,这不是一个真正的外键。它根本无法执行。我想我可以假设你在使用MyISAM表?
你真的应该让他们完全一样的价值,并考虑增加一个额外的列来存储前缀
这正是我一直在寻找! 谢谢! 彼得 – Sephen 2010-05-21 14:11:18
+1因为解释'fk'刺痛是不好的! – 2010-05-21 14:13:32