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 1
或0
。
我没有测试它,所以请告诉我,如果它不起作用。
你没有工作?因为括号应该是选择前 - 这似乎数字紧缩确定...( - 仍然在等待结果,60K行...)。 UPDATE T1 集X =(SELECT SUM(t1.s LIKE CONCAT( '%',t2.c, '%')) FROM T2 ) – ajo 2010-11-07 10:07:36
我希望它的工作好,看起来很整齐。虽然需要很长时间(t1有60k行,t2 2k)。 - 如果t1是一个非常长的表,但t2只有很少的(比如说3)条目,那么通过主要通过t2条目来实现这个结果会更快吗? – ajo 2010-11-07 10:19:44
是的,它工作得非常好(花了大约10分钟)。非常感谢你。 (我怀疑可能没有更快的解决方案......) – ajo 2010-11-07 10:29:24