将LEFT OUTER JOIN转换为仅使用子查询和注释



是否可以将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;

最新更新