我有一个有点奇怪的问题,我一直在反对,我想知道是否有人会有任何想法。更困难的是,它必须在嵌入式产品的受限环境中工作,我只能在连接后更改查询。
我在两个表之间有一个连接来形成完整的行,每一行都有一个模块ID和一个工作列,对于未工作和0表示工作。每行还有一个配额列,它引用模块ID,所有具有相同模块ID的行具有相同的配额值。
所以例如数据是
ID |Module | Quota | Complete
-------------------------
1 |A | 1 | 0
2 |B | 2 | 1
3 |A | 1 | 0
4 |A | 1 | 0
5 |B | 2 | 1
6 |C | 4 | 0
我想选择模块的完整列的总和小于该模块的配额的记录。
我必须去的地方:
Select table_a.quota, table_a.module, table_b.complete
from table_a inner join table_b on table_a.id = table_b.id
having table_a.quota > (select sum(table_b.complete) from table_a inner join table_b on table_a.id = table_b.id where table_a.module = *module*)
由于我只能影响having子句之后的任何内容,我不知道如何从嵌入式语句( module )中的原始查询行引用模块值,任何想法?
提前感谢任何有帮助的人!
答案 0 :(得分:0)
首先请注意,据我所知,你想使用WHERE而不是HAVING;你没有GROUP BY。
在引用外部查询方面,在相关子查询中,您需要使用别名......
SELECT
table_a.quota,
table_a.module,
table_b.complete
FROM
table_a
INNER JOIN
table_b
ON table_a.id = table_b.id
WHERE
table_a.quota
>
(
SELECT
SUM(lookup_b.complete)
FROM
table_a AS lookup_a
INNER JOIN
table_b AS lookup_b
ON lookup_a.id = lookup_b.id
WHERE
lookup_a.module = table_a.module
)