[英]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.