簡體   English   中英

如何安全地加入這些表?

[英]How to join these tables safely?

我有一張桌子Table1 我的應用程序代碼從Table1讀取,如下所示:

Select id, table2_id, table3_id from Table1

我希望它也通過像這樣更改我的查詢來從表Table2Table3返回值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.idt3.id是唯一的列,因此Table2Table3最多可包含1記錄每個Table3的記錄。 如果我是用戶inner join ,則此更改將不安全,因為如果Table2Table3碰巧不包含預期記錄,我的查詢將不會返回任何結果。

對於這種情況,我的更改是否安全且正確? 或者是否有必要編寫一些子查詢來加入?

您的查詢看起來很安全:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM