我试图找到1到100之间所有数字的除数,我有一个介于1和100之间的所有int的表。
使用该表我有这段代码:
$ git blame 673bdae7548^ -- foo.c
但子查询不识别外部查询中的“num”。
如何将这样的值传递给子查询?
答案 0 :(得分:1)
您可以使用相关查询执行此操作。但是,有两点需要理解:
SELECT
中的列别名。它仅识别外部FROM
。所以:
CREATE TABLE divisors AS
SELECT i.n AS num,
(select COUNT(i2.n) FROM ints i2 WHERE i.n % i2.n = 0)
FROM ints i;
您还会注意到表别名是表名的缩写,而不是任意字母。
答案 1 :(得分:0)
这应该提供分配器列表:
SELECT a.n,b.n
FROM ints a
JOIN ints b
ON b.n < a.n AND a.n % b.n = 0
ORDER BY a.n
要计算每个数字的除数数,请尝试以下方法:
SELECT a.n,count(distinct b.n) as `num_divisors`
FROM ints a
JOIN ints b
ON b.n < a.n AND a.n % b.n = 0
GROUP BY a.n
ORDER BY a.n