【发布时间】:2010-05-21 22:13:19
【问题描述】:
我有两张桌子,例如表_1 和表_2。我想从 table_2 中选择外键,id 来自 table_1,但 table_2 中外键的值是 table_1 中带前缀的 id。
table_1.id = 1
table_2.fk_id = fk1
如何向 id 添加一个值以便选择 fk?
谢谢!
彼得
【问题讨论】:
我有两张桌子,例如表_1 和表_2。我想从 table_2 中选择外键,id 来自 table_1,但 table_2 中外键的值是 table_1 中带前缀的 id。
table_1.id = 1
table_2.fk_id = fk1
如何向 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 表?
你真的应该让它们的值完全相同,并考虑添加一个额外的列来存储前缀
【讨论】: