在其中条款如果匹配



使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

相关内容

最新更新