从具有连接的两个表中搜索数据如何处理空值

时间:2012-06-04 17:00:45

标签: mysql

我写了一个搜索查询,它将加入两个不同的表。我已经把左连接放在了两个上面。现在第一个表包含60个记录,而基于第二个表只有30个。现在我想如果我搜索查询应该返回所有60记录。现在它又回来了30。 查询相同。

  

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

请指导我,谢谢。

2 个答案:

答案 0 :(得分:0)

明智的做法是记住JOIN操作(各种JOIN操作,LEFT,RIGHT,INNER,OUTER)的目的是创建一个由连接在一起的表组装而成的新的虚拟表。 / p>

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

  1. A表中是否存在具有A.ID列值的行,这些行在B.AID中不会出现?
  2. B表中是否有行,其中B.AID列值在A.ID中不会出现?
  3. 如果对问题1的回答为“是”而问题2为“否”,那么LEFT JOIN将给出您想要的结果。但是简化您的查询。试试这个。

     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
    

    但你应该仔细考虑这一点。

答案 1 :(得分:0)

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

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