Mysql WHERE子句如果匹配
使Mysql WHERE子句如果匹配,mysql,Mysql,使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 m
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
首先,请注意问号不是无效语法——我使用的是Codeigniter,它将问号用作绑定参数
第10行(和m.org_id=?
)取决于左连接是否实际找到了某些内容。如果成员
表中没有匹配项,那么第10行就不需要了。事实上,这成了一个问题。我想将结果限制在第10行,除非members表中没有匹配项。在这种情况下,我只想忽略WHERE
子句的这一部分
我相信这可以通过使用子查询来实现,尽管我不确定如何计算语法。还有别的办法吗?如果是,还可以通过其他方式实现这一结果?如果没有其他方法,是否有人可以针对这种情况演示子查询的实现,并解释它是如何工作的
谢谢大家! 如果左连接与记录不匹配,则这些左连接字段为空。为什么不检查该字段是否为空,如果不是空,则检查它。)
那么为什么不在连接条件部分指定这些条件呢?啊,我真傻。尽管经过多年的网站开发,我仍然发现自己无法用SQL清晰地思考问题。我知道这很简单!谢谢。:)
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