这个问题更多的是2012年3月回复的问题。由于这是4个月后,我提出了一个新问题。参考:MySQL LEFT JOIN - Values can be NULL
我的SQL语句如下所示:
SELECT cs.case_id, cs.child_firstname, gu.*
FROM tblcases AS cs
LEFT JOIN tblguardians AS gu
ON cs.case_id = gu.case_id AND gu.firstname LIKE '%Craig%'
WHERE cs.child_firstname LIKE '%Sally%'这工作正常:
如果两个值均已设置(按上述示例)。
如果设置了cs.child_firstname并且gu.firstname只是通配符
但是,如果cs.child_firstname只是通配符,并且设置了gu.firstname,那么将返回数据库中的所有行,包括NULL值 - 理想情况下,我不想使用NULL值。
此查询是否可以重写为执行所有操作,或者是否需要有多个查询?
更新
下面的字段是我的表单中的字段,全部使用$ _POST传递并使用PHP进行处理。我希望这给出了一些数据来自何处的指示以及它与数据库表的关系。子元素们的领域在坦布尔人的tblcases和监护人领域。
子元素名字
子元素姓氏
小孩出生日期
守护者名字
监护人姓氏
监护人电话
卫报邮编
更新2
SQL查询现在如下所示:
SELECT
DISTINCT(cs.case_id) AS case_id, CONCAT(cs.child_firstname, ' ', child_surname) AS childname, DATE_FORMAT(child_dob, '%d/%m/%Y') AS child_dob, DATE_FORMAT(created, '%d/%m/%Y') AS created, gu.firstname, gu.surname
FROM
tblcases AS cs
LEFT JOIN tblguardians AS gu
ON cs.case_id = gu.case_id
AND gu.firstname LIKE '%$_POST[parent_firstname]%'
AND gu.surname LIKE '%$_POST[parent_lastname]%'
WHERE
cs.child_firstname LIKE '%$_POST[child_firstname]%'
AND cs.child_surname LIKE '%$_POST[child_surname]%'
AND ('$_POST[child_firstname]' != '' OR gu.firstname IS NOT NULL)