【发布时间】:2017-04-08 19:59:51
【问题描述】:
谁能帮我重建以下 MySQL 查询以使其正常工作:
SELECT c.id, COUNT(DISTINCT d.student_id) FROM contract c, (
SELECT student_id FROM ilc_course ic, contract_seat cs2
WHERE c.id = cs2.contract
AND cs2.id = ic.contract_seat
AND ic.valid = 1 AND cs2.valid = 1
AND (ic.finished IS NULL OR ic.finished > CURRENT_TIMESTAMP)
UNION
SELECT student_id FROM glc_to_user_profile_student gtups, glc_course gc, contract_seat cs2
WHERE c.id = cs2.contract
AND gtups.contract_seat = cs2.id AND gtups.glc_course = gc.id
AND gtups.valid = 1 AND gc.valid = 1 AND cs2.valid = 1
AND (gtups.left_date IS NULL OR gtups.left_date > CURRENT_TIMESTAMP)
AND (gc.end_date IS NULL OR gc.end_date > CURRENT_TIMESTAMP)
) d GROUP BY c.id;
查询应该计算来自两个来源的所有不同学生,并按合同对他们进行分组。
问题是对 c.id 的子查询引用。显然,子查询对合约表一无所知。
我非常感谢帮助使它工作。
谢谢!
【问题讨论】:
-
简化。添加示例表数据和预期结果(以及格式化文本。)
-
如果你使用了显式连接就会这样。
-
@P.Salmon 不,这无济于事。子查询不能引用外部查询中的表(除了相关的子查询,这不是)。
-
为什么需要加入
contract表?除了c.id,你没有使用那里的任何东西,它与cs2.contract相同。