2

我有一列“代码”,它可能有一个包含多个值的字符串,例如“ CODE1&CODE2”......我只需要第一个作为我的JOIN......有点像code.split("&")[0]

SELECT myTable.*, otherTable.id AS theID 
FROM myTable INNER JOIN otherTable 
ON myTable.(+++ code before the & +++) = otherTable.code

中的值myTable也可能只是CODE1

4

1 回答 1

1

SUBSTRING_INDEX将完全按照您的意愿行事 - 将列的子字符串返回到指定字符:

SELECT 
    myTable.*, 
    otherTable.id AS theID 
FROM myTable 
INNER JOIN otherTable 
    ON SUBSTRING_INDEX(myTable.code, '&', 1) = otherTable.code

更多信息:http ://dev.mysql.com/doc/refman/5.0/en/string-functions.html

这是一个演示它的小提琴:http ://sqlfiddle.com/#!2/96a6e/2

请注意,如果您要加入许多列,这将是缓慢的。您不仅消除了使用索引的可能性,而且在每次比较时都执行了非常慢的字符串操作。我不建议在非常大的桌子上使用它。如果您的数据集很大,您可能需要考虑重新架构您的数据库。

于 2013-06-12T01:51:10.480 回答