使用FULL OUTER JOIN拼接表資料

2021-09-21 20:36:01 字數 2075 閱讀 2277

今天幫使用者修改乙個報表,裡邊設計到出庫和入庫的操作,要將每個產品每天的出入口資訊列出來。

可能存在這樣的情況:

1.   

產品在出庫表中存在資料但是入庫表中沒有資料

2.   

產品入庫表中存在資料但是出庫表中沒有資料

所以這個

report

直接使用

inner join

或者left join/right join

連線兩張表都得不到想要的資料。當時

report

的開發者的思路是先將符合條件的產品從出庫表和入庫表中找出來,然後使用

left join

連線入庫表和出庫表獲得最終資料。當然這樣做沒有問題,但是不需要中間表,只需要借助

full outer join

就可以獲得需要的資料。(

full outer join

平時一般很少用到)

這裡我們舉個例子:

--建立測試表並且建立測試資料:

create

table a(idint

,qtyint)

create

table b(idint

, qtyint)

insert

into a values 

(1,10)

insert

into a values 

(2,20)

insert

into b values 

(2,30)

insert

into b values 

(3,40)

--希望得到的

最終結果:

--使用

--使用

--使用

可以看到全外連線返回參與連線的兩個資料集合中的全部資料,無論它們是否具有與之相匹配的行。在功能上,它等價於對這兩個資料集合分別進行左外連線和右外連線,然後再使用消去重複行的並操作將上述兩個結果集合並為乙個結果集。

簡單來說就是

left join union right join的結果集,使用下面的語句跟fullouter join的結果是完全相同的。

select a.id as inbound,a.qtyas inqty,b.idas outbound,b.qtyas outqty from a left

outer

join bon a.id= b.id

union

select a.id as inbound,a.qtyas inqty,b.idas outbound,b.qtyas outqty from a right

outer

join bon a.id= b.id

使用GraphEdit使用

1 註冊元件。其實乙個filter就是乙個com元件,所以使用之前需要註冊,可以有兩種方法對元件進行註冊。1.直接使用命令。命令列下輸入 regsvr32 hqtlystd.ax 編譯之後你會在工程目錄下的debug中找到hqtlystd.ax,這個就是要用的filter 即可註冊成功。2.vc6....

MySQL使用學習使用 mysql學習使用

1 mysql學習 1 安裝 ubuntu下直接安裝 apt get install mysql server 2 檢查伺服器是否啟動 sudo netstat tap grep mysql,如果啟動成功,出現以下資訊 tcp00localhost.localdomain mysql listen ...

學習使用CSDN markdown使用

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...