是否可以将LEFT OUTER JOIN转换为仅使用带有注释的查询和子查询?
我有一个像这样的复杂查询,我不能使用LEFT OUTER JOIN,并且需要以某种方式不使用:
select count(cua.a),cua.b, w.c, cp.p
from cua
LEFT OUTER JOIN cp on cp.id=cua.b
JOIN cu on cu.id=cua.a
LEFT OUTER JOIN w on w.id = cu.w_id
where cp.id=1
and (date IS NULL or date > NOW())
group by cua.b, cp.p, w.c, w.name;
如果我能弄清楚如何用子查询和其他函数进行左外连接,那么我想我就能弄清楚整个事情。
感谢任何帮助或指导。
EDIT:添加表名(X.y(
这:
where cp.id=1
以这样一种方式筛选查询结果,即拒绝表cp
中所有不匹配的行,因此:
LEFT JOIN cp
相当于:
INNER JOIN cp
还有这个:
group by cua.b, cp.p, w.c, w.name
使用表w
的两列,因此除非您希望这两列使用null
的组,否则:
LEFT OUTER JOIN w
相当于:
INNER JOIN w
所以我想不需要子查询,因为您只需INNER
联接就可以安全地重写查询:
SELECT count(cua.a),cua.b, w.c, cp.p
FROM cua
INNER JOIN cp ON cp.id=cua.b
INNER JOIN cu ON cu.id=cua.a
INNER JOIN w ON w.id = cu.w_id
WHERE cp.id=1
AND (date IS NULL OR date > NOW())
GROUP BY cua.b, cp.p, w.c, w.name;