MySQL:通过一个表循环并更新另一个表?

问题描述:

表T1:MySQL:通过一个表循环并更新另一个表?

s (string)  | x (int) 
----------------+-------- 
"gfrdgeradfg" | 0 
"abdfodpnmn" | 0 
...    | ... 

表T2:

c (varchar(1)) 
----- 
"a" 
"c" 
"g" 
"r" 
----- 

我想补充+1到t1.x对于发生在t1.s每个字符t2.c,即结果应是这样的:

s    | x 
----------------+-------- 
"gfrdgeradfg" | 3  (contains "a","g","r") 
"abdfodpnmn" | 1  (contains "a") 
...    | ... 

通过T2和T1更新在PHP循环是相当简单的,但我宁愿做它在纯SQL,如果可能的话。

感谢您的帮助。

UPDATE t1 
SET x = (
    SELECT SUM(t1.s LIKE CONCAT('%', t2.c, '%')) 
    FROM t2 
) 

澄清:表达式t1.s LIKE CONCAT('%', t2.c, '%')将评估为布尔这相当于在MySQL 10

我没有测试它,所以请告诉我,如果它不起作用。

+0

你没有工作?因为括号应该是选择前 - 这似乎数字紧缩确定...( - 仍然在等待结果,60K行...)。 UPDATE T1 集X =(SELECT SUM(t1.s LIKE CONCAT( '%',t2.c, '%')) FROM T2 ) – ajo 2010-11-07 10:07:36

+0

我希望它的工作好,看起来很整齐。虽然需要很长时间(t1有60k行,t2 2k)。 - 如果t1是一个非常长的表,但t2只有很少的(比如说3)条目,那么通过主要通过t2条目来实现这个结果会更快吗? – ajo 2010-11-07 10:19:44

+0

是的,它工作得非常好(花了大约10分钟)。非常感谢你。 (我怀疑可能没有更快的解决方案......) – ajo 2010-11-07 10:29:24