根据WHERE
的结果,使JOIN
子句的一部分最简单的方法是什么?我意识到这是一个非常含糊不清和令人困惑的问题,所以请允许我简单地向您展示我想要实现的目标:
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
首先,请注意问号不是无效的语法 - 我正在使用Codeigniter,它将它们用作绑定参数。
第10行(AND m.org_id = ?
)取决于LEFT JOIN
是否确实找到了某些内容。如果members
表中没有匹配项,则不需要第10行。事实上,它成了一个问题。我想限制第10行的结果,除非成员表中没有匹配项。在那种情况下,我只想忽略WHERE
子句的那一部分。
我相信这可以使用子查询来实现,尽管我不确定如何计算语法。还有其他方法吗?如果是,那么这个结果怎么可能实现呢?如果没有其他方法,有人可以为这种情况展示子查询的实现,并解释它是如何工作的吗?
谢谢!
答案 0 :(得分:0)
如果LEFT JOIN与记录不匹配,则那些LEFT JOINed字段为空。为什么不检查该字段是否为空,如果不是,则检查它。)
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 = ? OR m.org_id IS NULL)
AND e.form_id = ?
GROUP BY a.member_id
ORDER BY a.member_id