使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行将不必要。实际上,这成为一个问题。除非 在成员表中没有匹配,否则我想限制结果。在这种情况下,我只想忽略WHERE
子句的那一部分。
我相信,使用子征服可以实现这一目标,尽管我不确定如何解决该语法。还有其他方法吗?如果是,那么如何实现这一结果?如果没有其他方式,有人可以证明针对这种情况的副查询的实现,并解释它是如何工作的吗?
谢谢!
如果左联接不匹配记录,则左联接的字段为空。为什么不只是检查该字段是否为null,何时未检查该字段。)
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