微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

仅当值存在时才如何从带有WHERE子句的联接表中选择?

如何解决仅当值存在时才如何从带有WHERE子句的联接表中选择?

我想从table1(其中t1.id = 1)中选择一条记录,然后将table2和table3(t2.field2和t3.field3)加入到table1中,但是只有在值存在的情况下(IS NOT NULL)。>

例如,如果t3.field3的值不存在,则该表的field3列不会显示...

Utility

我试图做的代码是这样的:

   t1

 id  |  field1
---------------
 1   |   f1val
 2   |   f1val
 3   |   f1val


       t2

 id(fk)  |  field2
-------------------
 1       |   f2val
 2       |   null
 3       |   null


       t3

 id(fk)  |  field3
-------------------
 1       |   null
 2       |   f3val
 3       |   f3val

从上面的查询返回的联接表如下:

    SELECT t1.id,t2.field1,t3.field3
    FROM (
       SELECT t1.id
       FROM t1
       WHERE t1.id = 1
    )
   LEFT JOIN t2 ON t2.id = t1.id AND t2.id is not null
   LEFT JOIN t3 ON t2.id = t1.id AND t3.id is not null;

但是,由于field3为null,所以我希望它仅返回id和field2,如下所示:

 id  |  field2  | field3
----------------------------
  1  |   f1val  |  null

我们将非常感谢您的帮助。

解决方法

可以使用=返回一列:

coalesce()

但是,有时不能返回两列,有时不能返回3列。

注意:

  • 完全不需要SELECT t1.id,COALESCE(t2.field1,t3.field3) as field_2_3 FROM t1 LEFT JOIN t2 ON t2.id = t1.id LEFT JOIN t3 ON t3.id = t1.id WHERE t1.id = 1; 上的子查询。您可以仅在单个t1子句中应用过滤器。
  • WHERE的比较是不必要的,因为它们始终无法通过IS NOT NULL条件。
  • 最后一个JOIN条件大概在JOIN上。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。