根据JOIN
的结果生成WHERE
子句的一部分的最简单方法是什么?我知道这是一个非常模糊的和混乱的问题,所以请允许我简单地告诉你我想实现:WHERE子句如果匹配
SELECT m.member_id, m.first_name, m.last_name
FROM cal_form_answers a
INNER JOIN cal_form_elements e
USING(element_id)
INNER JOIN cal_forms f
USING(form_id)
LEFT JOIN members m
USING(member_id)
WHERE f.org_id = ?
AND m.org_id = ?
AND e.form_id = ?
GROUP BY a.member_id
ORDER BY a.member_id
首先,注意问号是不是无效的语法,我使用笨,这使用它们作为绑定参数。
第10行(AND m.org_id = ?
)取决于LEFT JOIN
是否实际找到某物。如果members
表中没有匹配,则第10行变得不必要。事实上,这成了一个问题。我想限制第10行的结果,除非成员表中没有匹配。在这种情况下,我只想忽略WHERE
条款的那部分内容。
我相信这可以使用子查询来实现,但我承认不确定如何制定语法。有没有其他方法?如果是的话,这个结果如何能够实现?如果没有其他方式,有人可以演示一个子查询的实现情况,并解释它是如何工作的?
谢谢!
那么,为什么不在连接条件部分指定这些条件呢? – zerkms