【问题标题】:Search data from two table with joins how to handler null values从带有连接的两个表中搜索数据如何处理空值
【发布时间】:2012-06-08 18:02:41
【问题描述】:

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

select A.,B. from A left join B on A.Id=B.AId where A.name=IfNull('tst',A.name) AND B.class=IFNull('c',B.class)。

请指导我,谢谢。

【问题讨论】:

  • 看到 30 条记录后我的表 B 没有与 A 匹配的值。事实上,表 B 只有 30 条记录。

标签: mysql


【解决方案1】:

记住 JOIN 操作(各种 JOIN 操作,LEFT、RIGHT、INNER、OUTER)的目的是创建一个新的虚拟表,该表由连接在一起的表组装而成。

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

  1. 您的 A 表中是否存在具有 A.ID 列值的行在 B.AID 中没有出现过?
  2. 您的 B 表中是否存在 B.AID 列值在 A.ID 中没有出现的行?

如果问题 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

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

【讨论】:

  • 是的,我的问题已经解决了。我写了 B.Name=ifnull('Test',B.Name) 并且我传递的 B.Name 的值为 null 并且表值也为 null.so 它应该匹配但这个条件失败了。当我写 B.Name 为 null 时,它可以工作。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 2012-12-19
    • 1970-01-01
    • 2020-07-30
    • 2015-07-13
    相关资源
    最近更新 更多