[英]MySQL outer query reference in a union subquery not working
任何人都可以帮助我重建以下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的子查询引用。 显然,子查询对合同表一无所知。
我非常感谢您的帮助,以使其能够正常工作。
谢谢!
您需要在子查询中选择cs2.contract
,然后在外部查询中将其与c.id
结合在一起。
SELECT c.id, COUNT(d.student_id)
FROM contract c
JOIN (
SELECT cs2.contract, student_id
FROM ilc_course ic
JOIN contract_seat cs2 ON cs2.id = ic.contract_seat
WHERE ic.valid = 1 AND cs2.valid = 1
AND (ic.finished IS NULL OR ic.finished > CURRENT_TIMESTAMP)
UNION
SELECT cs2.contract, student_id
FROM glc_to_user_profile_student gtups
JOIN glc_course gc ON gtups.glc_course = gc.id
JOIN contract_seat cs2 ON gtups.contract_seat = cs2.id
WHERE 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 ON c.id = d.contract
GROUP BY c.id;
此外,由于UNION
会从子查询中删除重复项,因此您无需在COUNT()
使用DISTINCT
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.