答案 0 :(得分:1)
您的sql代码,T2.age的值必须拆分,我选择SQL substring 这是你的SQL,我没有测试它,但它应该工作,如果我发现我将编辑的错误:
Update T2 set no_of_member =
(Select COUNT(*) FROM T1
WHERE T1.age
BETWEEN substring(T2.age,1,instr(T2.age,"-") -1) AND ´
substring(T2.age,instr(T2.age,"-"),LEN(T2.age))
);
说明:
substring(T2.age,1,instr(T2.age,"-") -1)
通过使用字符串的初始位置和"-"
字符的位置来获取T2.age中第一个年龄的值
T2.age = '23-25'
---> substring(T2.age,1,instr(T2.age,"-") -1) = 23
同样的道理
substring(T2.age,instr(T2.age,"-"),LEN(T2.age) = 25
其余的是简单的更新查询
<强>建议强>:
不要像那样("23-25"
)保存T2.age。而是将它分开,以便您可以通过使用一列T2.from
和另一个T2.until
或类似的内容来运行更简单,更快速的查询
答案 1 :(得分:0)
执行此操作的一种简单方法是相关子查询。但是,t2
的结构很糟糕。您应该具有最小值和最大值的列。因为您没有这个,所以您的查询比实际需要的更复杂:
update t2
set numOfMembers = (select count(*)
from t1
where t1.age >= substring_index(t2.age, '-', 1) + 0 and
t2.age <= substring_index(t2.age, '-', -1) + 0
);
不要在一列中放置两个值(例如您的范围)。相反,有两列minage
和maxage
。
答案 2 :(得分:0)
select count(*) from t1, t2 where t1.Age between LEFT(t2.age , 2) and Right(t2.age , 2) group by t2.age
这将使你不再需要会员