乙個業務邏輯引發的對多表連線的思考

2022-02-13 11:22:43 字數 933 閱讀 2845

批量插入語句:insert into 保養表(value..)select (value...) from 裝備表

實現上面業務邏輯主要難點是在查的部分,實現---(//在滿足現在時間大於保養時間的情況下,有兩種情況會被插入到保養表裡.1:該裝備在保養表裡的state=0的,2:該裝備在保養表裡沒有的)

實現這個需求可以有兩種查的思路

1:不使用多表連線,差不多是內連線的思路(我也不知道這種說法對不對)

大概是這樣子 select(value)from 裝備表 where idnot in(select  matid from 保養表where 沒有保養完成的)

2.多表連線

select  value from 裝備表  left join 保養表 on 裝備表.id=保養表.matid  where(b.matid is null or b.state<>0)and nextbaoyang<=getdate()

多表連線的方式是裝備表左連線保養表,也就是說最終會顯示裝備表裡符合的所有資料,包括了保養表裡沒有的資料,這些沒有的資料就滿足了《保養表裡不存在該裝備》這個邏輯,所以寫成b.matld is null是正確的,也是一開始我不理解的。

我一開始的寫法我展示一下

這種寫法有兩個錯誤。

1:查不到資料:因為前面那個多表連線的裝備表和後面那個裝備表不是同乙個(這個有點複雜),所以我要把b.state 放到內連線的那個()裡面作為條件而不是放在外面作為多表連線的條件

多表連線產生的是類似檢視一樣的虛擬表,只是用來檢視的,不能用來進行其他操作,在linq時多表連線也是產生了乙個新的物件,最後取得欄位也應該從新物件取而不是舊的物件。

乙個多表聯合查詢引發的思考

朋友做乙個專案,遇到乙個多表聯合查詢的需求。需要乙個sql,當a表中system id值為123時,找到b表和c表的關聯,當b表滿足system id值為123時,包含其中的role id資料,顯示c表中name資料。例如查詢結果為 james lucy.t table a表 idsystem id...

乙個liunx命令題目引發的對shell的回顧

原題回顧 列印當前資料夾下所有的.txt檔案的最後一行到新檔案newfile.txt中 其答案最後解答如下 bin bash for file in ls doif f file file txt then tail 1 file newfile.txt fidone 在實現的過程中遇到了一些問題,...

mysql 多表連線查詢的乙個例子

現在有三個表 角色表 shop role id role name 許可權表 shop privilege id pri name 角色許可權表 shop role pri role id pri id 要查詢角色所擁有的許可權名稱。思路 先查詢角色擁有的許可權 id 在角色許可權表 再通過許可權 ...