当前位置: 首页 > 面试题库 >

MySQL LEFT JOIN-值可以为NULL

向俊贤
2023-03-14
问题内容

我正在修改MySQL语句,但LEFT JOIN和空白行有一些麻烦。目前,我有:

SELECT cs.case_id, cs.child_firstname, gu.*
FROM tblcases AS cs 
LEFT JOIN tblguardians AS gu
ON cs.case_id = gu.case_id 
WHERE cs.child_firstname = '%craig%' AND gu.firstname LIKE '%sally%'

只要“ tblguardians”表中有一个条目,该查询就可以正常工作,但是如果没有记录,则LEFT JOIN返回NULL-
因此,当我遍历PHP中的结果时,不会返回该条目。

有没有一种方法可以从“ tblcases”返回字段,而无论“
tblguardians”是否有关联的结果?我想我已经读了太多的Google页面,以获取更多信息!


问题答案:

在您的WHERE子句中的联接表上放置一个条件可以有效地使该联接成为INNER JOIN。
为了避免这样做,您必须在LEFT JOIN中添加第二个条件:

 SELECT cs.case_id, cs.child_firstname, gu.*
   FROM tblcases cs

        LEFT JOIN tblguardians gu
        ON cs.case_id = gu.case_id 
    AND gu.firstname LIKE '%sally%' /* <- this line was moved up from WHERE */

  WHERE cs.child_firstname = '%craig%'


 类似资料:
  • 我有返回给我一些JSON后端。 我将其解析为我的类: 然后我从服务器(使用rxJava)检索数据,没有任何错误。但是我预料到了一个错误,因为我认为我应该做这样的事情(以防止GSON转换器错误,因为在我的JSON响应中不存在): 在从后端接收数据并将其解析到带有构造函数的SomeData类(不带def值)之后,notNullableValue的值==NULL。 据我所知,在Kotlin中不是可空值可

  • 我们知道我们可以将null赋给可为null的类型。例如: 我们知道第二种说法是有效的,因为有人告诉我们它是有效的,我们只是接受它,而不问为什么。但如果查看的源代码,则为: 我们可以将赋给为的原因是由于隐式运算符,它允许您隐式强制转换int为。根据隐式运算符的规则,作为的右手边,必须是结构类型,但显然不是合法的结构值,那么如何做(更不用说本身就是一个结构),为什么不违反隐式运算符规则

  • 我知道下一个场景:(奇怪的格式,我知道) 如果线程#1和线程#2在完全相同的时间输入,这将发生: > 两者都将执行" CMPXCHG指令同时对两个线程生效: 3.1锁定前缀本机使用 3.2线程#1或#2首先到达,赢得比赛。 3.3获胜线程比较(是aBoolean==true?)这将返回"true",因此一个布尔值将被设置为"false"。 3.4 aBoolean现在为false。 3.5线程丢失

  • Kotlin编译器给了我以下警告: 警告:(399,1)Kotlin:内联“…”的预期性能影响可能是无关紧要的。内联最适用于具有lambda参数的函数 在这种情况下,我想取消显示此警告。但是,我不知道给什么值,也找不到任何文档说明接受什么值。 可以为提供哪些可能的值,它们是什么意思?

  • 问题内容: 当我开始使用Java时,向我暗示我们有两种不同的类型: 我刚从教授那里拿回一份考试,这种差异意味着两个选择作为答案之间的差异。当我请教授澄清时,他告诉我原始值可以是对象。 谁在这里,谁能给我任何证据?证明将是官方的声音,我会选择答案作为答案,同时还会奖励一些众所周知的互联网。 问题答案: 原始值可以视为对象吗? 答案是不。 该JLS状态 Java编程语言中有 两种类型 :基本类型(第4

  • 我正在运行一个函数,试图找到工作表最后一行、最后一列的值,并将此值用作范围值的一部分。在我的测试表中,最后一列、最后一行的值是数字3。第45行和第46行来自我在同一工作表上使用的另一个函数,用于重命名活动工作表。此函数正常工作,即脚本找到数字3并将活动工作表重命名为3。第56行显示脚本在使用静态值时工作正常。第57行是我尝试使用getLastRow和getLastColumn方法将此数字作为get