2010-05-21 1 views
0

J'ai deux tables, par ex. table_1 et table_2. Je veux sélectionner la clé étrangère de table_2 avec l'ID de table_1 mais la valeur de la clé étrangère dans table_2 est l'ID de table_1 avec un préfixe.Ajout d'un caractère à une clé étrangère dans l'instruction SELECT

table_1.id = 1

table_2.fk_id = fk1

Comment puis-je ajouter une valeur à l'ID que je peux sélectionner le fk?

Merci!

Peter

Répondre

3

Vous pouvez le faire comme ça

SELECT * FROM table_1 INNER JOIN table_2 ON CONCAT('fk',CAST(table_1.id AS CHAR))=table_2.fk_id) 

Cependant, cela va être très lent. Je suggérerais soit d'utiliser une requête de mise à jour sur table2 pour changer tous vos identifiants fkX en X, soit de créer une colonne calculée sur table1, qui crée l'ID avec le préfixe fk ajouté. La raison pour laquelle il est lent est que la jointure ne peut pas être effectuée à l'aide d'index. Lorsque vous modifiez les types de clé pour qu'ils soient directement comparables, ils peuvent être indexés et accélérer la jointure.

+0

C'est exactement ce que je cherchais! Merci! Peter – Sephen

+0

+1 pour expliquer que la piqûre 'fk' est mauvaise !!! –

0

Le vrai problème ici est que ce n'est pas une vraie clé étrangère. Ce n'est pas exécutable du tout. Je suppose que je peux supposer que vous utilisez des tables MyISAM?

Vous devriez vraiment les faire exactement la même valeur et envisager d'ajouter une colonne supplémentaire pour stocker le préfixe

Questions connexes