Mysql 使用联接从两个表中搜索数据如何处理空值

Mysql 使用联接从两个表中搜索数据如何处理空值,mysql,Mysql,我已经编写了一个搜索查询,它将连接两个不同的表。我在两个球上都打了左接球。现在第一个表包含60条记录,而第二个表只有30条记录。现在我想,如果我搜索查询应该返回所有记录。现在它正在返回30。 同样的问题 从A.Id=B.AId上的左侧连接B中选择A.,B.,其中 A.name=IfNull('tst',A.name)和B.class=IfNull('c',B.class) 请指导我,谢谢。明智的做法是记住联接操作(各种联接操作,左、右、内、外)的目的是创建一个新的虚拟表,该表由联接在一起的表组合

我已经编写了一个搜索查询,它将连接两个不同的表。我在两个球上都打了左接球。现在第一个表包含60条记录,而第二个表只有30条记录。现在我想,如果我搜索查询应该返回所有记录。现在它正在返回30。 同样的问题

从A.Id=B.AId上的左侧连接B中选择A.,B.,其中 A.name=IfNull('tst',A.name)和B.class=IfNull('c',B.class)


请指导我,谢谢。

明智的做法是记住联接操作(各种联接操作,左、右、内、外)的目的是创建一个新的虚拟表,该表由联接在一起的表组合而成

这个连接的虚拟表应该包含什么?在您的情况下,A.ID列和B.AID列的含义是什么

  • A表中是否有A.ID列值在B.AID中不会出现的行
  • B表中是否有B.AID列值在A.ID中不出现的行
  • 如果问题1的答案是肯定的,而问题2的答案是否定的,那么左连接将提供您想要的。但要简化您的查询。试试这个

     SELECT A.*, B.*
       FROM A
       LEFT JOIN B ON A.ID = B.AID
    
    如果您碰巧只需要A中没有对应B行的行,请尝试此操作

     SELECT A.*
       FROM A
       LEFT JOIN B ON A.ID = B.AID
       WHERE B.AID IS NULL
    
    如果两个问题的答案都是肯定的,那么您可能需要:

     SELECT A.*, B.*
       FROM A
       OUTER JOIN B ON A.ID = B.AID
    

    但是你应该仔细考虑。

    试试这个逻辑,我希望它对你有用

    select A.*,B.* from A left join B on A.Id=B.AId where B.Id != ''
    

    查看30条记录后,我的表B没有与A匹配的值。事实上,表B只有30条记录。是的,我的问题已解决。我编写了B.Name=ifnull('Test',B.Name),我传递的B.Name的值为null,表值也为null。因此它应该匹配,但此条件失败。当我写B的时候,名字是空的,它是有效的。