如何解决仅当值存在时才如何从带有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 举报,一经查实,本站将立刻删除。