[英]How to join these tables safely?
我有一张桌子Table1
。 我的应用程序代码从Table1
读取,如下所示:
Select id, table2_id, table3_id from Table1
我希望它也通过像这样更改我的查询来从表Table2
和Table3
返回值name
:
select t1.id, t1.table2_id, t1.table3_id, t2.name, t3.name
from table1 t1
left outer join table2 t2 on t1.table2_id = t2.id
left outer join table3 t3 on t1.table3_id = t3.id
但是,我不想更改原始查询的行为,它在Table1
每行返回 1 个结果。
我相信我的查询变化是安全的,因为他们t2.id
和t3.id
是唯一的列,因此Table2
和Table3
最多可包含1记录每个Table3
的记录。 如果我是用户inner join
,则此更改将不安全,因为如果Table2
或Table3
碰巧不包含预期记录,我的查询将不会返回任何结果。
对于这种情况,我的更改是否安全且正确? 或者是否有必要编写一些子查询来加入?
您的查询看起来很安全:
select t1.id, t1.table2_id, t1.table3_id, t2.name, t3.name
from table1 t1 left join
table2 t2
on t1.table2_id = t2.id left join
table3 t3
on t1.table3_id = t3.id;
您还可以使用相关子查询(或横向连接)来表达这一点:
select t1.*,
(select t2.name from table2 t2 where t1.table2_id = t2.id) as t2_name,
(select t2.name from table3 t3 where t1.table2_id = t3.id) as t3_name,
from table1 t1;
这更能保证没有重复。 如果存在,查询将返回错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.