如何将当前行的值传递给SQL中的子查询?

时间:2017-04-27 23:27:59

标签: mysql sql mysqli

我试图找到1到100之间所有数字的除数,我有一个介于1和100之间的所有int的表。

使用该表我有这段代码:

$ git blame 673bdae7548^ -- foo.c

但子查询不识别外部查询中的“num”。

如何将这样的值传递给子查询?

2 个答案:

答案 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